将 rs232 消息保存到变量
Saving a rs232 message to a variable
如果我通过RS232收到一条由2字节长度组成的消息,例如0000 0001 0001 1100(即100011100,右侧的lsb),我想将其保存到一个名为value的变量中。
我正在通过此步骤"解码"字节流:
rxByte = Serial1.read()
messageContent[0] = rxByte
messageContent[1] = rxByte
第二个 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
thousands
和123
,所以你把你的数字建立为45*1000+123=45123
。 256 是 2^8,等于一个完整的字节,b'1 0000 0000'。
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 无法通过头文件保存变量的值
- 一个变量的输入值也会保存到另一个变量中
- 是否可以在C++变量中保存多种类型的枚举?
- 如何在 c++ 中创建一个可以将自身保存为变量的类?
- 可视化C++从文件中保存/读取多个变量
- 将数据从 SQLite 数据库保存到变量中
- C++我应该用什么来保存格式化为字符串变量(如sprintf())的文件
- 指向结构变量的指针未保存到eeprom
- (C++)for循环中的空初始语句是否保存所有编译器中变量的上一次初始化
- 让类方法为每个实例保存不同的静态变量
- 在没有外部文件的情况下在应用会话之间保存变量
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 将特征数组行保存在变量中
- 将枚举类变量保存到JSON中
- 局部变量保存相同的内存地址
- 类中的变量保存了错误的值
- C++ 我无法使用 fstream 变量保存到文件
- 无法将float转换为float*错误,但我将变量保存为数组