其他分享
首页 > 其他分享> > c – portable __attribute __((__ packed__))

c – portable __attribute __((__ packed__))

作者:互联网

是否存在__attribute __((__ package___))的可移植等效项

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

解决方法:

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

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

通常不会有任何对齐,因为它基本上使用无符号字符.当然,如果你对疼痛有很高的耐受性,你可以随时使用补偿的枚举:

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)

只要你有胃,就可以完全携带.

标签:c-3,c,portability
来源: https://codeday.me/bug/20190902/1789303.html