3

是否有便携式等效物 __attribute__ ((__packed__))

(我所说的可移植性是指在 PC、Android 和 iPhone 上工作,无论架构如何)

4

2 回答 2

4

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

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

通常不会有任何对齐,因为它基本上使用无符号字符。当然,如果你对疼痛有很高的容忍度,你总是可以使用一个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)

只要您有胃口,它将完全便携。

于 2012-04-27T15:47:55.977 回答
1

不。结构包装和填充不是 C++ 语言规范的一部分(它属于平台 ABI),因此任何处理它的东西都在语言之外。

于 2012-04-27T15:41:06.010 回答