当某位设置为开启时,整数转换失败

本文关键字:整数 转换 失败 设置 | 更新日期: 2023-09-27 17:53:07

最令人困惑的-我们正在尝试处理一个八位元组流二进制文件。我们有各种可能的目标结构体。传入的文件是一个x字节的字符串——一个blob——我们知道我们首先需要将其转换为字节数组。我们使用FOR循环每次将一个字节移动到字节数组中。然后,当我们知道数据的特定结构(由数据中的固定位置文本字段定义)时,我们使用特定于该结构的反序列化例程。字符数组使用一个反序列化函数来填充字符串变量,整数字段填充其他变量(通常是uint16),等等。当我们知道我们有一个int16(2字节整数)时,如果低阶整数的字节8被设置为负,处理将失败。在使用FOR循环(标准

)将blob移到字节数组之前,我们不知道FOR循环中的8位是整数,char还是其他类型。
for (i=1, I <= blob_length, i++) 
{dest(i) = source(i); } 

),我们已经确定了哪个结构在起作用。

当我们退出反序列化时,我们看到数据损坏如下:

so十进制511二进制01 11111111转换成十进制256二进制01 00000000

但十进制383二进制01 01111111正确转换

如果高阶位打开,我们无法判断FOR循环处理是否无法处理8位字段,或者UINT16的实际反序列化过程是否失败。我们已经努力解决了其他与ascii相关的问题,其中第8位破坏了处理。不确定这是另一个,或者如果它是别的东西。

当某位设置为开启时,整数转换失败

通常索引是基于0的,for循环应该是这样的:

for(int i = 0; i < blob_length; i++) {
    dest[i] = source[i]; 
}

可能你少了一个字节。