我是一名初级程序员,正在尝试用 C 语言学习图像处理并找到了一些教程,但我卡在了一行(负责提取 宽度 )
int 宽度 = *(int*)&header[18];
我无法理解上面的语法。
谁能简单解释一下?
最佳答案
int width = *(int*)&header[18];
假设 header
是 char*
或 char[]
类型,一个接一个:
header[18]
→ 获取header
的第18个元素
&header[18]
→ 获取header
的第18个元素的地址
(int*)&header[18]
→ 将 header
的元素 18 的地址转换为指向 int
*(int*)&header[18]
→ 获取指向int
的指针的内容。
BMP文件中的值存储little-endian .因此,此代码仅适用于小端平台。更通用的代码如下所示:
int width
= (unsigned)(unsigned char)header[18]
| (unsigned)(unsigned char)header[19] << 8
| (unsigned)(unsigned char)header[20] << 16
| (unsigned)(unsigned char)header[21] << 24;
int width
现在由移动到相应位置的各个字节组成。这应该适用于所有字节序。
关于c - 在c中提取BMP图像的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50908563/