tea加解密算法经过Keil编译在单片机中运行结果错误,求帮助

tea加解密代码在VC中运行是对的,在Keil中的运行结果却不对,求大神帮助!!!
代码如下:
#include <string.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z)
#define delta 0x9e3779b9
//unsigned long buffer[];
//unsigned long keybuffer[];
long btea(long* v,char n,long* k);
long btea(long* v, char n, long* k)
{
unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
long p, q ;
if (n > 1)
{
/* Coding Part */
q = 6 + 52/n;
while (q-- > 0) {
sum += DELTA;
e = (sum >> 2) & 3;
for (p=0; p<n-1; p++) y = v[p+1], z = v[p] += MX;
y = v[0];
z = v[n-1] += MX;
}
return 0 ;
}
else if (n < -1)
{
/* Decoding Part */
n = -n;
q = 6 + 52/n;
sum = q*DELTA ;
while (sum != 0) {
e = (sum >> 2) & 3;
for (p=n-1; p>0; p--) z = v[p-1], y = v[p] -= MX;
z = v[n-1];
y = v[0] -= MX;
sum -= DELTA;
}
return 0;
}
return 1;
}
void main()
{
unsigned long plainbuffer[2];
unsigned long testbuffer[4];
unsigned long plain[2]={0x23FF28AA,0xA76B4B04 };
unsigned long test[4]={0x01122334,0x45566778,0x899AABBC,0xCDDEEFF0};
unsigned long key[4]={0x01234567,0x89ABCDEF,0x01234567,0x89ABCDEF};
while(1)
{
memcpy(plainbuffer,plain,8);
memcpy(testbuffer,test,16);
btea(plainbuffer, 2,key);
btea(plainbuffer, -2,key);
btea(testbuffer, 4,key);
btea(testbuffer, -4,key);
_nop_;
// btea(buffer, -2,keybuffer);
}
}

c并没有规定int,long 之类的数据类型对应几个char,所以造成按位运算在不同的编译器下运行结果不一样
解决办法
#define int8 char
#define uint8 uchar
#define int16 int //16位mcu
#define int16 (short int)//32位mcu
.......
这个样子就可以避免数据类型的差异所带来的影响(不知道int代表几个char,就用sizeof(int))
还有,你的long btea(long* v,char n,long* k);
而你调用的时候btea(plainbuffer, 2,key);
函数签名和定义的数据类型不一致,也会发生错误(不要以为unsigned可有可无)
你这样调整一下,应该就没有问题了追问

再问一下,如果是32位数据该怎么定义?

而且调用的时候函数签名已经是unsigned,还是不对怎么办?

温馨提示:答案为网友推荐,仅供参考