Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 结构奇异偏移_C++_Struct_Bmp - Fatal编程技术网

C++ 结构奇异偏移

C++ 结构奇异偏移,c++,struct,bmp,C++,Struct,Bmp,但应输出以下内容: 2 4 16 2 90 =?= 0 我不知道为什么BMP_头中的文件大小有4个偏移量,如果2个字符(BMP_头中的MN)有2个字节大小 我正在使用MinGW许多abi指定结构应该根据其最大成员对齐。在您的例子中,BMP\u Header的最大成员大小为4个字节,因此它与4个字节对齐。这意味着需要添加一些填充(因为您只有14个字节的值表示)。在MN和filesize成员之间添加填充,以便所有成员都与4字节边界对齐 请注意,这完全依赖于目标机,如果编译跨平台,则不能依赖结果。

但应输出以下内容:

2 4
16 2
90 =?= 0
我不知道为什么BMP_头中的文件大小有4个偏移量,如果2个字符(BMP_头中的MN)有2个字节大小


我正在使用MinGW

许多abi指定结构应该根据其最大成员对齐。在您的例子中,
BMP\u Header
的最大成员大小为4个字节,因此它与4个字节对齐。这意味着需要添加一些填充(因为您只有14个字节的值表示)。在
MN
filesize
成员之间添加填充,以便所有成员都与4字节边界对齐


<>请注意,这完全依赖于目标机,如果编译跨平台,则不能依赖结果。

< P>这是因为C和C++编译器通过在其中添加一个或多个字节来构造。这样做是为了提高数据访问的效率

例如,在第一种情况下,编译器在两字节
MN
成员和
文件大小
之间添加了两个字节,这是一个
int
,可能是因为在目标体系结构中,当地址可被4整除时,访问
int
会更快


注意:您可以使用而不是执行指针操作来计算
结构的相应元素的偏移量

,感谢您的帮助和有用的注意
2 4
16 2
90 =?= 0
2 2
14 2
90 =?= 90