我的问题看起来很像

How to store a 64 bit integer in two 32 bit integers and convert back again

(我有一个无符号的32位,我需要在C中放入4个无符号的8位变量)



我的问题是:

uint8_t a;
uint32_t b;
a = b;

保证a填充了最右边的八个位,而不是最左边的八个位?

最佳答案

是的。执行以下任一操作:

uint32_t num32 = 0xdeadbeef;

uint8_t a = num32;       /* 0xef */
uint8_t b = num32 >> 8;  /* 0xbe */
uint8_t c = num32 >> 16; /* 0xad */
uint8_t d = num32 >> 24; /* 0xde */

或这个:
union u
{
    uint32_t num32;

    struct
    {
        uint8_t a;
        uint8_t b;
        uint8_t c;
        uint8_t d;

    } bytes;

} converter;

converter.num32 = 0xdeadbeef;

第一个示例而不是取决于平台的耐久性,第二个示例则是

10-06 11:43