是否有__attribute__ ((__packed__))的便携式版本

(通过可移植性,我的意思是在PC,Android和iPhone上工作,无论架构如何)

最佳答案

根据定义,__attribute__是不可移植的。如果您希望以特定方式获取数据,则Plan9解决方案通常是在结构中使用unsigned char数组:

struct foo {
    uchar data1[4];
    uchar other[2];
}

通常不会有任何对齐方式,因为它基本上使用无符号字符。当然,如果您对疼痛具有较高的承受能力,则可以始终使用offset的enum:
enum { FOO_DATA1=0, FOO_OTHER=4, FOO_LAST=6 };

然后可以像这样加载它:
unsigned char foo[FOO_LAST];
uint32_t n = htonl(val)
memcpy(foo+FOO_DATA1, &n, sizeof n)
memcpy(foo+FOO_OTHER, &some_16_bit_val, sizeof some_16_bit_val)

只要您有胃,它就可以完全携带。

10-08 08:31