从C ++中的二进制文件读取字节时,整数有时会偏离正数或负数256,

时间:2018-11-14 23:47:50

标签: c++

我有一个二进制数据集,我试图一次读取2个字节来提取16位整数。我正在尝试复制JavaScript中已经有的实现,这意味着我要测试正确的输出。出于某种奇怪的原因,读入的120个整数中有8个在任一方向上都恰好偏移256。起初,我以为我误读了一点,但是在查看了二进制形式的数字后,有些数字偏离了一位以上。例如,读入的整数之一应为1297(11000010001),而应为1553(10100010001),其中第二个和第三个最高有效位不同。有人看到我要去哪里了吗?如果有帮助,我可以发布正确的JavaScript代码。

ifstream inputFile (inp, ios::binary);
int test = 0;
int fileHeaderOffset = 80+648+2700;
int x = 840;
int y = 359;
int columnBytes = 2414;
int width = 120;
int height = 121;

int16_t buff[height * 2];
int offset = fileHeaderOffset + (x * columnBytes) + (y * 2) + 8;
inputFile.seekg(offset+1);
for(int j = 0; j < height * 2; j++){
   inputFile.read((char*)&buff[test], 2);
   test++;
}

1 个答案:

答案 0 :(得分:0)

我发现了我的问题所在。我读的字节太远,也无法字节交换。额外的查找字节导致它获取正确整数的低字节,之后是该整数的高字节。由于整数在点之间变化不大,因此相邻点的高字节通常是相同的,因此通常可以正常工作,但是当整数通过256的倍数时,高字节发生变化,并且该字节偏移1,即表示该数字减去256。