[英]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.