![](/img/trans.png)
[英]what is the difference between __attribute__((__packed__)); and #pragma pack(1)
[英]portable __attribute__ ((__packed__))
是否存在__attribute__ ((__packed__))
的可移植等效项
(通过便携性,我的意思是在PC,Android和iPhone上工作,无论架构如何)
根据定义, __attribute__
是不可移植的。 如果您希望数据以特定方式使用,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)
只要你有胃,就可以完全携带。
编号结构打包和填充不是C ++语言规范的一部分(它属于平台ABI),因此处理它的任何内容本身都在语言之外。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.