您的位置:首页 > 其它

signed unsigned 引发的血案

2014-05-21 10:12 211 查看
bug描述:

问题产生于局域网传输一幅图片。

服务端负责发送,是由另一个同事用C#写的,我用C++写接收客户端。

我们约定在传输一幅图片前,先传固定4个字节的size信息,然后传图片数据。

结果发现有些图片总是末尾坏掉一截或是干脆就传不过来。

bug原因:

在我接收到size[4]后,我采用了size = size[3]*256*256*256 + size[2]*256*256+size[1]*256+size[0]的方式来将字符串转换为整形。

但是size[4]是char型字符串,于是在char型字符和整形相乘的过程中,char型被自动转换成了signed int型,于是出现负数,导致size计算出错。

在每个字符前加(unsigned char)转换一下就正确了。

当然这里还有另外一种得到size的方式, 强制转换指针类型,然后直接取值:size = *((unsigned int *)size);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: