结合uint8_t,uint16_t和uint8_t

时间:2017-01-20 22:02:01

标签: c bit-manipulation bitwise-operators

我有三个值,uint8_tuint16_tuint8_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; 

1 个答案:

答案 0 :(得分:2)

这应该是你的嵌套暗示和作为一线书面转换:

uint32_t comb = ((uint32_t)v1 << 24) | (((uint32_t)v2 << 8) | v3);

基本上,你有8 | 16 | 8建立32位大小的类型。要移动第一个并放在头部,您需要转换为32位并使用24(32-8)。然后在移动时对下一个进行OR,即放置在右偏移处,其余分别用零填充和铸造。

您使用OR的原因是不丢失任何信息。