我还没有找到回答这种确切行为的问题,不知何故我只是不明白发生了什么:
我将 Windows 位图文件 (bmp) 的内容读入一个数组,稍后使用该数组提取所需信息:
char biHeader[40];
// ...
source.read(biHeader,40);
// ...
int biHeight = biHeader[8] | (biHeader[9] << 8) | (biHeader[10] << 16) | (biHeader[11] << 24);
在此之后,biHeight
显示-112
哪个是完全错误的,因为它应该是400
。因此,我查看了文件的 hexdump。读取的内容是:
90 01 00 00
正如预期的那样,将字节顺序更改为大端会给出0x190
十进制400
。
如果我将上面的代码更改为:
unsigned char biHeader[40];
// ...
source.read((char*)biHeader,40);
// ...
int biHeight = ... (same as before)
...然后我得到预期值。这里发生了什么?
并且:您将如何读取这些数据?