我的问题看起来很像
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;
第一个示例而不是取决于平台的耐久性,第二个示例则是。