将 rs232 消息保存到变量

Saving a rs232 message to a variable

本文关键字:变量 保存 消息 rs232      更新时间:2023-10-16

如果我通过RS232收到一条由2字节长度组成的消息,例如0000 0001 0001 1100(即100011100,右侧的lsb),我想将其保存到一个名为value的变量中。

我正在通过此步骤"解码"字节流:

rxByte = Serial1.read()

messageContent[0] = rxByte

messageContent[1] = rxByte

第一个 rxByte 的值为 0000 0001,

第二个 0001 1100。或者这些值是否已经在内部转换为十六进制或 DEC?

现在我已经看到了以这种方式将其保存为值的代码:

uint32_t value = 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));

解码过程:

//char messageContent[2]; //Always keep in mind datatypes in use!!!
messageContent[0] = Serial1.read()
messageContent[1] = Serial1.read()

你的做法是在两个位置上放置相同的价值。

如果要将两个字节都读入 16 位或更大的整数:

short int messageContent = Serial1.read()<<8+Serial.read();

或者这些值是否已经在内部转换为十六进制或 DEC?

数据始终是二进制的。十六进制或十进制只是它的表示。你说"变量 x 作为 123 的值"——这是人类的解释,实际上变量 x 是一个内存块,由一些字节组成,这些字节本身就是 8 位组。

现在我已经看到了以这种方式将其保存为值的代码:

uint32_t值 = 消息内容[0]

*256 + 消息内容[0]

这就像我告诉你45 thousands123,所以你把你的数字建立为45*1000+123=45123。 256 是 2^8,等于一个完整的字节,b'1 0000 0000'。