如何确定位域的顺序?我可以通过执行x.c来更改位域的元素,其中x是结构类型的变量。我试图掩饰它并将其打印出来,但我只能打印结构中的每个元素,而不是整个变量。我试图给一个位域的元素指定一个指针,但是它出现了一个错误。确定C编译器的位域顺序的最佳方法是什么?例如,这个结构将以什么顺序表示?确定位域的顺序C
struct bit_fields
{
unsigned int a : 6,
b : 8,
c : 18;
}
如何确定位域的顺序?我可以通过执行x.c来更改位域的元素,其中x是结构类型的变量。我试图掩饰它并将其打印出来,但我只能打印结构中的每个元素,而不是整个变量。我试图给一个位域的元素指定一个指针,但是它出现了一个错误。确定C编译器的位域顺序的最佳方法是什么?例如,这个结构将以什么顺序表示?确定位域的顺序C
struct bit_fields
{
unsigned int a : 6,
b : 8,
c : 18;
}
根据C11
,章§6.7.2.1/ P11
[....]位字段的分配单位(高阶内 低阶的顺序或低阶到高阶)是实现定义的。未指定可寻址存储单元的对齐方式 。
要知道的最好方法是在您的平台上检查您的编译器文档和ABI。
对不起,听起来像一个完整的初学者,但什么是ABI?我在哪里可以检查它? – danielwestfall
@danielwestfall https://en.wikipedia.org/wiki/Application_binary_interface –
@danielwestfall ABI是“应用程序二进制接口”,它是您的特定系统的低级框架,它指定事物如何在内存中分配等等。 – Lundin
为每个字段准备一个具有良好识别位模式的实例,memcpy将它存储到适当大小的无符号字符数组中,并查看每个字段的位置。 –