【发布时间】:2018-09-02 15:53:14
【问题描述】:
我正在编写一个 C 程序来读取和解析 BMP 标头。前 2 个字符是字符,我打印得很好。但是,所有其他位都是小端格式的整数,所以我将它们向后存储。在十六进制中,我得到了正确的答案。但是,当我尝试将它们转换为 int(为了便于阅读)时,我得到一个无效的数字。
bmp.c --
printf("file size: "%02x %02x %02x %02x\n", bmp->size[0], bmp->size[1], bmp->size[2], bmp->size[3]);
printf("file size: "%d\n", bit2int(bmp->size));
bit2int 函数 --
int bit2int(void *thing)
{
return *(int*)thing;
}
输出 --(实际文件大小为 415,798 字节)
file size: 00 06 58 36
file size: 911738368
edit 1 -- 我正在使用的函数
void storebackwards(void *dst, void *src, int offset, int n) {
for(int i = n; i > 0; i--)
memcpy( dst + n - i, src + offset + i - 1, 1);
}
【问题讨论】:
-
0x065836是大端的文件大小。只需使用移位和掩码解码值 -
这似乎比 4 位值(范围:0-15)略大。
-
BMP 规范规定大小为小端。如果您执行了交换,那么您正在读取一个大端序号,如果您使用的是 intel,您将获得一个交换后的值。你能告诉我们你用来读取尺寸数据的代码吗?
-
@usr2564301 OP 可能意味着 4 个字节
-
@Jean-FrançoisFabre 当然!编辑历史记录