如果我通过 RS232 接收到一条包含 2 个字节长度的消息,例如0000 0001 0001 1100(即 100011100,右边的 lsb),我想将它保存到一个名为 value 的变量中。
我正在通过这一步“解码”字节流:
rxByte = Serial1.read()
messageContent[0] = rxByte
messageContent[1] = rxByte
第一个 rxByte 的值为 0000 0001,第二个为 0001 1100。 或者这些值是否已在内部转换为 HEX 或 DEC?
现在我看到了以这种方式将其保存为值的代码:
uint32_t 值 = messageContent[0] *256 + messageContent[0]
这是如何工作的?
最佳答案
messageContent[0] *256
本质上是一个位移位:代码等同于(并且更具可读性)
uint32_t value = (messageContext[0]) << 8 + messageContent[1];
所以如果 `messageContent[0] = 0x01' 和 messageContext[2] = 0x1C
value = (0x01 << 8)+0x1C
value = (0x0100)+0x1C
value = 0x011C
可以找到,但取决于您机器的字节顺序,它等同于:
uint32_t value = *((uint16_t*)(messageContext));
关于c++ - 将 rs232 消息保存到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19844705/