我读过结构中位字段的顺序是平台特定的。如果我使用不同的编译器特定的打包选项,那么能否保证数据会在写入时按照正确的顺序存储吗?例如:
struct Message
{
unsigned int version : 3;
unsigned int type : 1;
unsigned int id : 5;
unsigned int data : 6;
} __attribute__ ((__packed__));
在具有GCC编译器的英特尔处理器上,这些字段在显示时放在内存中。Message.version是缓冲区中的前3位,并且接着是Message.type。
发布于 2018-04-17 20:08:16
不,它不会完全便携。结构的打包选项是扩展,并且它们本身不是完全可移植的。除此之外,C99§6.7.2.1第10段规定:“单元内位字段的分配顺序(从高阶到低阶或从低阶到高阶)是由实现定义的。”
例如,即使是单个编译器也可能会根据目标平台的字节顺序将字段放在不同的位置。
发布于 2018-04-17 20:43:43
位编辑器和编译器的位字段差别很大。
通过GCC,大端机器首先将位置放在大端,小端机器首先放置小端。
因此,如果你需要机器独立的二进制布局,你必须自己做。
https://stackoverflow.com/questions/-100003904
复制相似问题