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

C++ 从C+;中的二进制文件读取字节时,整数有时会以正256或负256为关+;,c++,C++,我有一个二进制数据集,我试图通过每次读取2个字节来提取16位整数。我正在尝试复制一个已经在JavaScript中实现的实现,这意味着我有正确的输出进行测试。出于某种奇怪的原因,在120个读入的整数中,有8个在任意一个方向上精确地偏离256。起初我以为我误读了一个位,但在看了二进制数字后,有些数字偏离了一位以上。例如,读入的一个整数是1297(11000010001),而它本应是1553(1010000001),其中第二个和第三个最高有效位不同。有人知道我哪里出错了吗?如果有帮助的话,我可以发布正

我有一个二进制数据集,我试图通过每次读取2个字节来提取16位整数。我正在尝试复制一个已经在JavaScript中实现的实现,这意味着我有正确的输出进行测试。出于某种奇怪的原因,在120个读入的整数中,有8个在任意一个方向上精确地偏离256。起初我以为我误读了一个位,但在看了二进制数字后,有些数字偏离了一位以上。例如,读入的一个整数是1297(11000010001),而它本应是1553(1010000001),其中第二个和第三个最高有效位不同。有人知道我哪里出错了吗?如果有帮助的话,我可以发布正确的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++;
}
ifstream输入文件(inp,ios::binary);
int检验=0;
int fileHeaderOffset=80+648+2700;
int x=840;
int y=359;
int columnBytes=2414;
整数宽度=120;
整数高度=121;
int16_t buff[高度*2];
int offset=fileHeaderOffset+(x*columnBytes)+(y*2)+8;
inputFile.seekg(偏移量+1);
对于(int j=0;j
我发现了我的问题所在。我读一个字节太远了,也没能交换字节。seek的额外字节导致它获取正确整数的低位字节,以及后面整数的高位字节。由于整数在点之间变化不大,相邻点的高位字节通常是相同的,因此它通常可以工作,但当整数通过256的倍数时,高位字节会发生变化,并且该字节会被关闭1,这意味着这个数字减少了256。

比javascript源代码更有用的是包含一个触发错误的小样本文件。这是非常罕见的一次,我会链接到输入文件,而不是将其嵌入到文章中。二进制数据和HTML不能很好地混合。请注意,该值的“第二位和第三位最高有效位”是第八位和第九位,即高位字节的低位。这些低位是唯一一个可以将值与预期值相差256的位置。