关于位域,是否可以操作一个字节中的某几位?
定义结构如下:
typedef struct a
{
unsigned char Low:4;
unsigned char High:4;
}testbit;
testbit b;
b.High = 0x03;
b.Low = 0;
char bb = '0 ';
memcpy(&bb,(char *)&b,1);
能保证最好bb的值一定是0x30吗?
[解决办法]
我的方案:
char bb = (char)b.High ;
[解决办法]
typedef struct a
{
unsigned char Low:4;
unsigned char High:4;
}testbit;
typedef union u
{
testbit tb;
char ch;
} u;
给ch赋值,要不用位操作也行的吧
[解决办法]
位 是不倒序的,
所以,可以确认 bb=0x30
[解决办法]
关于位域,是否可以操作一个字节中的某几位?
====================
当然可以。
根据定义,
把某些位【必须是连续的】定义为一个位域成员,
然后操作这个成员即可。
比如你这里的 b.High = 0x03; 就是高四位赋值为 0x30 ...
[解决办法]
如果是多个字节,
那么可能字节序是 倒序的,
这个就需要根据不同的环境进行判断。
也就是多字节情况下,
memcpy 可能无法得到正确的结果,
因为字节序不对。
但是这里只有一个字节,
结果是可以确认的。
[解决办法]
如果不行,我把你的C++编译器吃了