下面是程序:[mw_shl_code=cpp,true]
unsigned char * data;
unsigned char length;
//此函数将回传 unsigned integer 型态的 CRC 值。
unsigned int crc_chk(unsigned char * data, unsigned char length) {
int j;
unsigned int crc_reg = 0xFFFF;
while
(length--)
{
crc_reg ^= *data++;
for (j = 0; j<8; j++)
{
if(crc_reg & 0x01)
{
crc_reg = (crc_reg >> 1) ^ 0xA001;
}
else {
crc_reg= crc_reg>>1;
}
}
}
return crc_reg;
}
[/mw_shl_code]
使用VS,运行结果是29,38 没问题。
keil:[mw_shl_code=cpp,true]unsigned int crcData;
u8 rs485buf[8];
rs485buf[0]=0x01;
rs485buf[1]=0x06;
rs485buf[2]=0x00;
rs485buf[3]=0x67;
rs485buf[4]=0x00;
rs485buf[5]=0x50;
crcData=crc_chk(rs485buf, sizeof(rs485buf));
rs485buf[6]=crcData&0xff;
rs485buf[7]=crcData>>8; [/mw_shl_code]
运行结果是C6D3 ,请问是什么原因?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
找到原因了, sizeof(rs485buf)的结果是8,我直接改成6就好了,不过也是奇怪,为什么VS会得到不同的结果呢,,,,,,,
一周热门 更多>