首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >便携式__attribute__ ((__packed__))

便携式__attribute__ ((__packed__))
EN

Stack Overflow用户
提问于 2012-04-27 23:35:10
回答 2查看 854关注 0票数 3

是否有可移植的等同于__attribute__ ((__packed__))的工具?

(我所说的可移植性是指无论架构如何,都可以在PC、安卓和iPhones上工作)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-27 23:47:56

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

代码语言:javascript
复制
struct foo {
    uchar data1[4];
    uchar other[2];
}

通常不会有任何对齐,因为它基本上使用无符号字符。当然,如果你对疼痛有很高的耐受性,你总是可以使用enum的offsets:

代码语言:javascript
复制
enum { FOO_DATA1=0, FOO_OTHER=4, FOO_LAST=6 };

然后您可以像这样加载它:

代码语言:javascript
复制
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)

只要你有胃口,它就是完全便携的。

票数 4
EN

Stack Overflow用户

发布于 2012-04-27 23:41:06

不是的。结构打包和填充不是C++语言规范的一部分(它属于平台ABI),所以任何涉及到它的东西本质上都是在语言之外的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10353569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档