首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

移位出界有关问题

2012-02-24 
移位出界问题DWORDbCrcCaluation_CRC16(CalBuff,23)DWORDlCrcBuff,hCrcBufflCrcBuffbCrc&0x0ffhCrcBu

移位出界问题
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;
应该就可以发现后面两步根本没有任何问题,所以问题肯定不在那里。

热点排行