最困惑的是 - 我们正在尝试处理八位字节流二进制文件。我们有各种可能的目的地结构。传入的文件是一个x字节的字符串 - 一个blob - 我们首先需要将其转换为字节数组。我们使用FOR循环将一个字节一次移动到字节数组。然后,当我们知道数据的特定结构 - 由数据中的固定位置文本字段定义 - 我们使用特定于该结构的反序列化例程。字符数组使用一个反序列化函数来填充字符串变量,整数字段通过接收的数据填充其他变量(通常为UINT16s)等。当我们知道我们有一个int16(2字节整数)处理失败时,如果低阶整数的字节8被设置为负。我们不知道FOR循环中的8位是整数,字符,还是在使用FOR循环将blob移动到字节数组之后的情况(标准
for (i=1, I <= blob_length, i++)
{dest(i) = source(i); }
)我们已经确定了哪个结构正在发挥作用。
当我们退出反序列化时,我们看到数据损坏如下:
所以十进制511二进制01 11111111转换为十进制256二进制01 00000000
但十进制383二进制01 01111111正确转换
如果高阶位打开,或者如果UINT16的实际反序列化过程失败,我们无法判断FOR循环处理是否以某种方式无法处理8位字段。我们一直在努力解决其他与ascii相关的问题,因为第8位会破坏处理。不确定这是另一个,还是别的。
非常感谢任何见解或指导。
答案 0 :(得分:0)
通常索引是从0开始的,for循环应该是这样的:
for(int i = 0; i < blob_length; i++) {
dest[i] = source[i];
}
可能你只丢了一个字节。