如何创建一个具有 32 位 int 和四个 8 位 char 类型的联合,每个 char 类型都引用 32 位 int 的不同切片?
How to create a union with a 32 bit int and four 8 bit char types that each refer to difference slice of the 32 bit int?
我想创建一个最大成员为 32 位整数的联合。主要写到这里。然后有四个 8 位变量,可能是 char 类型,每个变量将引用 32 位整数的不同部分,例如:
union {
int32 myint;
char char1 [7:0];
char char2 [15:8];
char char3 [23:16];
char char4 [31:24];
}
但我不确定如何在 C++ 中执行此操作。
这可能有效:
union {
int32 myint;
char chars[4];
};
你可以使用这个:
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。
union intBytes {
int32 myInt;
struct {
char char1;
char char2;
char char3;
char char4;
};
char charArray[4];
};
intBytes dummy;
您在上面看到结构包装 char1
-char4
没有分配名称。这称为 anonymous struct
。匿名结构的成员可以在范围内直接访问 环绕 结构。
如果没有结构 char1
- char4
将在联合内重叠,并且都将引用 myInt
的第一个字节。匿名结构确保 char1 - char 按顺序排列。
C 有匿名结构和联合。 C++(C++11 之前)不允许匿名结构,只定义了匿名联合。但是,大多数 C++ 编译器(llvm、gcc)允许匿名 struct/unions.
在 C++11 中向 C++ 添加了匿名结构。
这允许您访问 dummy.char4
,而通常您必须键入 dummy.nameOfCharStruct.char4
。由于这不是符合标准的 c++(我相信它在 post C++03 Standatd 中被更改),您最好添加结构名称或使用数组方法。
我不明白你是想要一个 32 位整数和 4 个 8 位变量还是一个 32 位整数分成 4 个 8 位变量,但无论如何你应该尝试这样的事情:
union yourUnion {
int32 yourInt;
struct {
int32 var1 : 8;
int32 var2 : 8;
int32 var3 : 8;
int32 var4 : 8;
} yourSplitInterger;
};
希望对您有所帮助。
我想创建一个最大成员为 32 位整数的联合。主要写到这里。然后有四个 8 位变量,可能是 char 类型,每个变量将引用 32 位整数的不同部分,例如:
union {
int32 myint;
char char1 [7:0];
char char2 [15:8];
char char3 [23:16];
char char4 [31:24];
}
但我不确定如何在 C++ 中执行此操作。
这可能有效:
union {
int32 myint;
char chars[4];
};
你可以使用这个:
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。
union intBytes {
int32 myInt;
struct {
char char1;
char char2;
char char3;
char char4;
};
char charArray[4];
};
intBytes dummy;
您在上面看到结构包装 char1
-char4
没有分配名称。这称为 anonymous struct
。匿名结构的成员可以在范围内直接访问 环绕 结构。
如果没有结构 char1
- char4
将在联合内重叠,并且都将引用 myInt
的第一个字节。匿名结构确保 char1 - char 按顺序排列。
C 有匿名结构和联合。 C++(C++11 之前)不允许匿名结构,只定义了匿名联合。但是,大多数 C++ 编译器(llvm、gcc)允许匿名 struct/unions.
在 C++11 中向 C++ 添加了匿名结构。
这允许您访问 dummy.char4
,而通常您必须键入 dummy.nameOfCharStruct.char4
。由于这不是符合标准的 c++(我相信它在 post C++03 Standatd 中被更改),您最好添加结构名称或使用数组方法。
我不明白你是想要一个 32 位整数和 4 个 8 位变量还是一个 32 位整数分成 4 个 8 位变量,但无论如何你应该尝试这样的事情:
union yourUnion {
int32 yourInt;
struct {
int32 var1 : 8;
int32 var2 : 8;
int32 var3 : 8;
int32 var4 : 8;
} yourSplitInterger;
};
希望对您有所帮助。