在编写一段代码中,遇到这样的一个问题,找了挺长时间的,加上打印后才发现,原来是int 型转到unsigned char出了错误。
错误代码:
-
int uiArrayBuff[16] = {0x78,0x75,0xee,0x73,0xe7,0x72,0x61,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-
memcpy(stDescCwbCfg.unCfg.stCiPlusDesParams.au8EvenCW, ucArrayuiArrayBuff, 8);
-
memcpy(stDescCwbCfg.unCfg.stCiPlusDesParams.au8OddCW, ucArrayuiArrayBuff+8, 8);
在这个代码中,常习惯会把整数的数组标记为int型。而在使用memcpy中,strAddr为int型,而DestAddr为unsigned char型的数组。导致复制的值是错误的。
因为int型在内存中占4byte,而unsigned char在内存只占1 byte,所以copy中,就会以4 个字节的复制过去(copy后的结果如下:0x78 0 0 0 75 0 0 0),导致解开节目失败。
正确的方式如下:
-
u8 ucArray[16] = {0x78,0x75,0xee,0x73,0xe7,0x72,0x61,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-
memcpy(stDescCwbCfg.unCfg.stCiPlusDesParams.au8EvenCW, ucArray, 8);
-
memcpy(stDescCwbCfg.unCfg.stCiPlusDesParams.au8OddCW, ucArray+8, 8);
最好的解决的办法:尽量类型一致,避免一些意想不到的问题出现,也节约时间。养成一个良好的编程习惯。规范编程。
阅读(1501) | 评论(0) | 转发(0) |