繁体   English   中英

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

[英]Integers are sometimes off by positive or negative 256 when reading bytes from a binary file in C++

我有一个二进制数据集,我试图通过一次读取 2 个字节来提取 16 位整数。 我正在尝试复制我在 JavaScript 中已有的实现,这意味着我有正确的输出来测试。 出于某种奇怪的原因,读入的 120 个整数中有 8 个在任一方向上正好相差 256 个。 起初我以为我误读了一位,但在查看二进制数字后,有些数字相差不止一位。 例如,读入的整数之一是 1297 (11000010001),而它应该是 1553 (10100010001),其中第 2 位和第 3 位最高有效位不同。 有没有人看到我哪里出错了? 如果有帮助,我可以发布正确的 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++;
}

我发现我的问题是什么。 我读了一个字节太远,也未能进行字节交换。 额外的查找字节导致它获取正确整数的低字节,以及后面的整数的高字节。 由于整数在点之间变化不大,所以相邻点的高字节通常是相同的,所以它通常是有效的,但是当整数超过256的倍数时,高字节发生变化,该字节偏移1,即表示该数字减少了 256。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM