我有三个值,uint8_t
,uint16_t
和uint8_t
。我试图将它们合并到一个uint_32
而不会丢失顺序。我从这里发现了this个问题,但我在中间卡住uint_16
值。
例如:
uint8_t v1=0x01;
uint16_t v2=0x1001;
uint8_t v3=0x11;
uint32_t comb = 0x01100111;
我在考虑将v2
分散到两个单独的uint8_t:s中,但意识到可能有一些更简单的方法来解决它。
我的尝试:
v2 = 0x1001;
a = v2 & 0xFF;
b = v1 >> 8;
first = ((uint16_t)v1 << 8) | a;
end = ((uint16_t)b << 8) | v3;
comb = ((uint32_t)first << 16) | end;
答案 0 :(得分:2)
这应该是你的嵌套暗示和作为一线书面转换:
uint32_t comb = ((uint32_t)v1 << 24) | (((uint32_t)v2 << 8) | v3);
基本上,你有8 | 16 | 8建立32位大小的类型。要移动第一个并放在头部,您需要转换为32位并使用24
(32-8)。然后在移动时对下一个进行OR,即放置在右偏移处,其余分别用零填充和铸造。
您使用OR的原因是不丢失任何信息。