如何使用32位int和4个8位char类型创建一个联合,每个类型都引用32位int的差异切片?

qua*_*231 7 c++ unions

我想创建一个联合,其中最大的成员是32位整数.这将主要写入.然后有四个8位变量,可能是char类型,每个变量都会引用32位整数类型的不同部分:

   union {
   int32 myint;
   char char1 [7:0];
   char char2 [15:8];
   char char3 [23:16];
   char char4 [31:24];
   }
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在C++中这样做.

Cec*_*rdo 7

这可能有效:

union {
   int32 myint;
   char chars[4];
};
Run Code Online (Sandbox Code Playgroud)

  • 虽然比接受的答案更好,但 `char` 有问题,因为它没有被定义为一个八位字节。它也可以签名或未签名。 (2认同)

小智 6

我不明白你是否想要一个32位内插器和4个8位变量或一个32位内插器分成4个8位变量,但无论如何你应该尝试这样的事情:

union yourUnion {
    int32 yourInt;
    struct {
        int32 var1 : 8;
        int32 var2 : 8;
        int32 var3 : 8;
        int32 var4 : 8;
    } yourSplitInterger;
};
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


Dan*_*_ds 5

你可以用这个:

union myUnion {
    int32   myint;
    struct {
        char char1;
        char char2;
        char char3;
        char char4;
    } myChars;
};
Run Code Online (Sandbox Code Playgroud)

或者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;
};
Run Code Online (Sandbox Code Playgroud)

看到这里.

  • `:8`是多余的 (4认同)