Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++; 我在Windows操作系统中使用C++。_C++ - Fatal编程技术网

c++; 我在Windows操作系统中使用C++。

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

我有两个值。值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 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)