如何将uint8_t转换为uint16_t?
目前我是通过以下方式将uint16_t分解为uint8_t:
packetBuffer.header[0] = ((co2Val>>8) & 0xff);
packetBuffer.header[1] = (co2Val & 0xff);
packetBuffer.header[2] = ((humVal>>8)&0xff);
packetBuffer.header[3] = (humVal & 0xff);
packetBuffer.header[4] = ((tempVal>>8)&0xff);
packetBuffer.header[5] = (tempVal & 0xff);
co2Val、humVal 和 tempVal 都是 uint16_t 类型。
然而,为了得到对应的值,我需要将它们改回来。在另一端会以 uint8_t buf[16] 的形式接收这些值。
我是这样做的:
CO2Val = (buf[0]<<8)|buf[1];
HumVal = (buf[2]<<8)|buf[3];
HumVal = (HumVal & 0x0fff);
TempVal = (buf[4]<<8)|buf[5];
TempVal = (TempVal & 0x3fff);
结果不同。有人知道为什么吗?谢谢。
HumVal
和TempVal
的某些位? - Marcelo Cantos& 0xff
操作都是多余的冗杂代码。任何赋值/转换为无符号类型的操作都会自动包含一个隐式的& TYPE_MAX
操作。 - R.. GitHub STOP HELPING ICE