【发布时间】:2010-12-02 04:24:37
【问题描述】:
我读到结构中位字段的顺序是特定于平台的。如果我使用不同的编译器特定的打包选项,这会保证数据在写入时以正确的顺序存储吗?例如:
struct Message
{
unsigned int version : 3;
unsigned int type : 1;
unsigned int id : 5;
unsigned int data : 6;
} __attribute__ ((__packed__));
在带有 GCC 编译器的 Intel 处理器上,这些字段在内存中布局,如图所示。 Message.version 是缓冲区的前 3 位,Message.type 紧随其后。如果我找到各种编译器的等效结构打包选项,这会是跨平台的吗?
【问题讨论】:
-
由于缓冲区是一组字节,而不是位,因此“缓冲区中的前 3 位”不是一个精确的概念。你会认为第一个字节的 3 个最低位是前 3 个位,还是 3 个最高位?
-
在网络上传输时,“缓冲区中的前 3 位”结果是非常定义明确的。
-
@Joshua IIRC,以太网传输每个字节的最低有效位first(这就是广播位在哪里的原因)。
-
当您说“便携”和“跨平台”时,您指的是哪个?无论目标操作系统如何,可执行文件都将正确访问顺序 - 或者 - 无论工具链如何,代码都将编译?
标签: c++ c bit-manipulation endianness bit