我的问题看起来很像
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;
第一个示例不依赖于平台字节序,第二个依赖。
关于c - C 中的隐式类型转换(将 32 位 unsigned in 转换为 8 位 u int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3133376/