c++ - 将 rs232 消息保存到变量

标签 c++ serial-port arduino uart

如果我通过 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/

相关文章:

c++ - 可以具有 3 种不同数据类型的 vector C++

c++ - 使用变成共享库的 matlab 函数时无法解析的符号

linux - `/dev/ttyS0` 和 `/dev/ttys0` 之间的区别?

64 位 Vista 上的 Java RS232 通信

c++ - Arduino编程添加毫秒延迟

c - 验证用户名和密码

arduino - 如何在arduino flex传感器中以45度开始点亮?

c++ - 如何在 C++ 中比较 base36 值?

C++虚继承初始化顺序

c++ - 如果出现 CE_FRAME 错误,com 端口通信有什么问题?