我想创建一个联合,其中最大的成员是32位整数。这将主要写入。然后有四个8位变量,可能是char类型,每个变量都会引用32位整数类型的不同部分:
union {
int32 myint;
char char1 [7:0];
char char2 [15:8];
char char3 [23:16];
char char4 [31:24];
}
但我不确定如何在C ++中这样做。
答案 0 :(得分:6)
这可能有效:
union {
int32 myint;
char chars[4];
};
答案 1 :(得分:5)
您可以使用:
union myUnion {
int32 myint;
struct {
char char1;
char char2;
char char3;
char char4;
} myChars;
};
或uint8_t
:
union myUnion {
uint32_t myint;
struct {
uint8_t b1;
uint8_t b2;
uint8_t b3;
uint8_t b4; // or number them in reverse order
} myBytes;
};
请参阅here。
答案 2 :(得分:5)
我不明白你是否想要一个32位整数和4个8位变量或一个32位整数分裂4个8位变量,但无论如何你应该尝试这样的事情:
git mv
希望它有所帮助。
答案 3 :(得分:2)
union intBytes {
int32 myInt;
struct {
char char1;
char char2;
char char3;
char char4;
};
char charArray[4];
};
intBytes dummy;
上面你看到结构包裹char1
- char4
没有分配名称。这称为 anonymous struct
。匿名结构的成员可以在 sourrounding 范围内直接访问。
没有结构char1
- char4
将在联合内部重叠,并且所有结构都将引用myInt
的第一个字节。 annonymous struct确保char1 - char按顺序排列。
C有匿名结构和联合。 C ++(前C ++ 11)不允许匿名结构,只定义了匿名联合。但是,大多数C ++编译器(llvm,gcc)都允许使用匿名结构/联合。
在C ++ 11中将匿名结构添加到C ++中。
这使您可以访问dummy.char4
,而通常您必须输入dummy.nameOfCharStruct.char4
。由于这不是标准的符合c ++(我相信它在C ++ 03 Standatd后更改),您可能更好地添加结构名称或使用数组方法。