移位出界问题
DWORD bCrc = Caluation_CRC16(CalBuff,23);
DWORD lCrcBuff,hCrcBuff;
lCrcBuff = bCrc&0x0ff;
hCrcBuff = (bCrc> > 8)&0x0ff;//出错
通过调试可以看到bCrc是0x00008f43,lCrcBuff可以赋值为:0x00000043,程序运行到hCrcBuff = (bCrc> > 8)&0x0ff;语句出错,错误提示:Unhandled exception in EDtd.EXE (kernel32.dll):0xC0000005:Access Uiolation.
不知道什么问题
[解决办法]
#include <stdio.h>
int main(void)
{
unsigned int bCrc = 0x00008f43, lCrcBuff, hCrcBuff;
lCrcBuff = bCrc&0x0ff;
hCrcBuff = (bCrc> > 8)&0x0ff;
printf( "lCrcBuff: [%08x], hCrcBuff: [%08x]\n ", lCrcBuff, hCrcBuff);
return 0;
}
D:\> a
lCrcBuff: [00000043], hCrcBuff: [0000008f]
//没啊
[解决办法]
我认为错误应该由别处引起,只是到了那一步才体现出来而已。
这很容易验证,你只要把
DWORD bCrc = Caluation_CRC16(CalBuff,23);
改成
DWORD bCrc = 0x00008f43;
应该就可以发现后面两步根本没有任何问题,所以问题肯定不在那里。