C++ 将rs232消息保存到变量
如果我通过RS232接收到一条包含2字节长度的消息,例如0000 0001 0001 1100(即100011100,右侧的lsb),我想将其保存到一个名为value的变量中 我使用以下步骤“解码”字节流: rxByte=Serial1.read()C++ 将rs232消息保存到变量,c++,serial-port,arduino,uart,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。 或者这些值是否已经在内部转换为十六进制或十二进制 现在,我看到了以这种方式
messageContent[0]=rxByte
messageContent[1]=rxByte
第一个rxByte的值为0000 0001,第二个为0001 1100。
或者这些值是否已经在内部转换为十六进制或十二进制
现在,我看到了以这种方式将其保存为值的代码:
uint32\u t value=messageContent[0]*256+messageContent[0]
这是如何工作的?
messageContent[0]*256
本质上是一个位移位:代码与
解码程序:
//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();
short int-messageContent=Serial1.read()“你把你的号码设为45*1000+123=45123”我理解为什么,但不理解如何。。。所以计算机总是知道“*256”是十进制的?它也可以是十六进制,然后位移位将不起作用。首先,rxbyte=Serial1.read()当然是在每次迭代中生成的,它只是为了显示我是如何执行的。C编译器规则将(在源C代码中)编写的内容定义为十进制(255)、十六进制(0xff)或八进制(0377)。
uint32_t value = *((uint16_t*)(messageContext));
//char messageContent[2]; //Always keep in mind datatypes in use!!!
messageContent[0] = Serial1.read()
messageContent[1] = Serial1.read()
short int messageContent = Serial1.read()<<8+Serial.read();