我有三个值,uint8_tuint16_tuint8_t的顺序。我正试着把它们合并成一个uint_32而不丢失订单。我从这里找到了一个AA>问题,但我却被中间的uint_16值所困扰。
例如:

uint8_t v1=0x01;
uint16_t v2=0x1001;
uint8_t v3=0x11;

uint32_t comb = 0x01100111;

我在考虑把v2吐到两个独立的uint8: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;

最佳答案

这应该是您的嵌套暗示,并作为一行文字的转换:

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

基本上,你有8 | 16 | 8建筑32位大小的类型。要移动第一个并放在头部,您需要转换到32位并使用24(32-8)。然后或下一个同时移动,即在右偏移处放置,其余分别用零填充和铸造。
你使用或出于不丢失任何信息的明显原因。

关于c - 结合uint8_t,uint16_t和uint8_t,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41773060/

10-13 08:13