signed unsigned 引发的血案

来源:互联网 发布:windows上运行mac应用 编辑:程序博客网 时间:2024/06/05 22:37

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);

0 0
原创粉丝点击