Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313540
  • 博文数量: 243
  • 博客积分: 86
  • 博客等级: 民兵
  • 技术积分: 1045
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-09 17:03
个人简介

稳重,成熟

文章分类

全部博文(243)

文章存档

2015年(2)

2013年(72)

2012年(169)

我的朋友

分类: C/C++

2015-02-28 19:15:39

在编写一段代码中,遇到这样的一个问题,找了挺长时间的,加上打印后才发现,原来是int 型转到unsigned char出了错误。
错误代码:

点击(此处)折叠或打开

  1. int uiArrayBuff[16] = {0x78,0x75,0xee,0x73,0xe7,0x72,0x61,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  2. memcpy(stDescCwbCfg.unCfg.stCiPlusDesParams.au8EvenCW, ucArrayuiArrayBuff, 8);
  3. 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),导致解开节目失败。
正确的方式如下:

点击(此处)折叠或打开

  1. u8 ucArray[16] = {0x78,0x75,0xee,0x73,0xe7,0x72,0x61,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  2.         memcpy(stDescCwbCfg.unCfg.stCiPlusDesParams.au8EvenCW, ucArray, 8);
  3.         memcpy(stDescCwbCfg.unCfg.stCiPlusDesParams.au8OddCW, ucArray+8, 8);


最好的解决的办法:尽量类型一致,避免一些意想不到的问题出现,也节约时间。养成一个良好的编程习惯。规范编程。


 
阅读(1466) | 评论(0) | 转发(0) |
0

上一篇:安装eclipse的python插件

下一篇:没有了

给主人留下些什么吧!~~