位域中比特序的问题
如果定义如下的结构体
struct CLS
{
unsigned char s1:3;
unsigned char s2:2;
unsigned char s3:3;
}s;//定义1
void main()
{
s.s1=4;
s.s2=2;
s.s3=3;
}
在小端系统中是按如下的顺序存放的
s3 s2 s1
011 10 100
当s从小端系传递给大端系统中时,会按如下的顺序来解释
s1 s2 s3
011 10 100
即解释的结果为:
s.s1=3
s.s2=2
s.s3=4
要避免出现这种解释错误,我现在用的笨方法是在定义结构的位域顺序时就按反序
排列,即修改为:
struct CLS
{
unsigned char s3:3;
unsigned char s2:2;
unsigned char s1:3;
}s;//定义2
我想问的是如果我还安照定义1的方法来定义结构体
有没有类似htons ntohs处理字节序的方法来处理这种比特序
因为一开始写代码的时候没有考虑这个问题,
导致和别的系统通讯的大量结构体的都定义成了反序的了
请各位高人不吝赐教,谢谢
[解决办法]
union CLS
{
struct CLS_little_endian
{
unsigned char s1:3;
unsigned char s2:2;
unsigned char s3:3;
};
struct CLS_big_endian
{
unsigned char s3:3;
unsigned char s2:2;
unsigned char s1:3;
};
}s; //这样定义可以么?
[解决办法]
偶觉得有这个要求还是不用位域方便些, 自己位操作算了, 位域好像标准没规定顺序的吧 ...
[解决办法]
自己定义一个吧,好象没有捷径啊