从低到高的位顺序/在C中使用位域映射结构

lim*_*rra 1 c struct bit-manipulation bit-fields

我最近玩C中的位字段,显然,这些位从低到高排序,尽管谷歌不支持这一论点(例如维基百科).

请参考以下代码(http://ideone.com/UwWfJM):

#include <stdio.h>

struct bits {
    unsigned char a : 1;
    unsigned char b : 1;
    unsigned char c : 1;
    unsigned char d : 1;
    unsigned char e : 1;
    unsigned char f : 1;
    unsigned char g : 1;
    unsigned char h : 1;
};

int main(int argc, char **argv)
{
    unsigned char c = 33;
    struct bits *b = (struct bits *) &c;

    printf("dec: %u\n", c);
    printf("bits: %x", b->a);
    printf("%x", b->b);
    printf("%x", b->c);
    printf("%x", b->d);
    printf("%x", b->e);
    printf("%x", b->f);
    printf("%x", b->g);
    printf("%x\n", b->h);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

dec: 33
bits: 10000100
Run Code Online (Sandbox Code Playgroud)

...虽然我曾预料到比特排序是另一种方式(即00100001首先是MSB而最后一个是LSB).

有人可以解释这种行为吗?
此外,我可以假设映射将始终朝这个方向发展吗?

注意:不是在询问有关字节顺序的字节顺序.我的问题的背景是我试图将缓冲区映射到结构.缓冲区包含UDP消息,由"位映射"组成(即"位置x处的位表示这一点,位置yz处的位表示该位,依此类推").

谢谢!

And*_*nle 5

根据C标准的 6.7.2.1 :

单元内的位域分配顺序(高阶到低阶或低阶到高阶)是实现定义的.