我的代码过去是可以工作的,但是现在结构的大小突然变成了16字节。它曾经是13个字节。我最近从Xcode4.2升级到Xcode4.3.1 (4E1019)。
#pragma pack(1)
struct ChunkStruct {
uint32_t width;
uint32_t height;
uint8_t bit_depth;
uint8_t color_type;
uint8_t compression;
uint8_t filter;
uint8_t interlace;
};
#pragma pack()
STATIC_ASSERT(expected_13bytes, sizeof(struct ChunkStruct) == 13);
我试过了,但没有成功
#pragma pack(push, 1)
/* struct ChunkStruct { ... }; */
#pragma pack(pop)
我也尝试过以下方法,但没有成功
struct ChunkStruct {
uint32_t width;
uint32_t height;
uint8_t bit_depth;
uint8_t color_type;
uint8_t compression;
uint8_t filter;
uint8_t interlace;
} __attribute__ ((aligned (1)));
如何用Xcode4.3.1打包结构?
发布于 2012-04-29 18:11:36
Xcode使用gcc
和clang
编译器,这两个编译器都使用__attribute__((packed))
来指定结构打包。
struct foo {
uint8_t bar;
uint8_t baz;
} __attribute__((packed));
使用__attribute__((aligned(1)))
会告诉编译器从下一个字节边界开始每个结构元素,但不会告诉它最后可以放多少空间。这意味着编译器可以将struct
向上舍入到机器字大小的倍数,以便更好地在数组和类似的应用中使用。__attribute__((packed))
告诉编译器根本不要使用任何填充,即使在struct
的末尾也是如此。
https://stackoverflow.com/questions/10371296
复制相似问题