c++; 我在Windows操作系统中使用C++。
我有两个值。值1和值2 我想在无符号字符的前2位写入值1,在后6位写入值2 类似地,我想使用位操作从无符号字符中提取value1和value2 请帮助我如何达到我的要求c++; 我在Windows操作系统中使用C++。,c++,C++,我有两个值。值1和值2 我想在无符号字符的前2位写入值1,在后6位写入值2 类似地,我想使用位操作从无符号字符中提取value1和value2 请帮助我如何达到我的要求 union my_char { unsigned char value; struct { unsigned char field1 :2; unsigned char field2 :6; }; }; my_char c; c.value = 255; unsigned
union my_char {
unsigned char value;
struct {
unsigned char field1 :2;
unsigned char field2 :6;
};
};
my_char c;
c.value = 255;
unsigned char c1 = c.field1;
unsigned char c2 = c.field2;
编辑:
Jarod42是对的。根据C++标准,结果是未定义行为。尽管所有的(?)编译器都能完成,但这并不是一个解决方案
这就是为什么c++20标准现在有一点cast()
如果您不使用c++20,它很容易自己实现。请尝试使用类似这样的位运算符
char x = (value1<<6)|(value2&0x3f);
C++代码比一堆无法编译的单词工作得更好。你能用代码来解释吗?你知道如何生成和使用吗?如果没有,那就是开始的地方;value2=(x&0x3)@TruthSeeker-您应该回答这个问题。这将使您的声誉达到4位数的范围。:)你坐在999个RealTrestEkter上,我尝试了UR解决方案。当从X中提取Value2时,Value2没有收到正确的值。C++中的类型双关是无效的(它是UB)。
value1 = (x>>6) & 0x3;
value2 = (x & 0x3f)