问题:
在C++中处理强制类型转换的数据,需要用括号将需要转换的目标类型框起来,以达到强转的目的,但是在这个过程中可能会导致数据出现错误的现象。本文针对强转中出现的符号拓展的问题记录解决方案。
char receive_buffer[1024];
cout << hex << (int)(receive_buffer[i]) << endl;
receivefer[]接收到的正常数据
fD 06 00 00 14 FE 5A 42 00 00 05 00 01 01 21 01 BB 3D
在强转过程中,receive_buffer的数据发生了变化,部分数据出现了符号位扩展的问题,如下图所示
原因判断:
出现上述问题,初步判断符号位扩展,可自行百度。
可能是由于在强转过程中忽略了数据的符号位产生的错误,强制转换把符号位转换带来的影响,无符号和有符号可能需要做不同的处理。
解决方案:
针对上述问题,本文中所用到的数据都为无符号数据,为了不产生影响,需要将最原始的有符号数据转换成无符号数据,再继续做类型强转,这样或许会更加安全。
cout << hex << (unsigned int)(unsigned char)(receive_buffer[i]) << endl;