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