[英]Saving a rs232 message to a variable
如果我通過包含2個字節長度的RS232接收到一條消息,例如0000 0001 0001 1100(即100011100,右邊的lsb),我想將其保存到一個名為value的變量中。
我通過此步驟“解碼”字節流:
rxByte = Serial1.read()
messageContent[0] = rxByte
messageContent[1] = rxByte
第一個rxByte的值為0000 0001,第二個rxByte的值為00011100。或者這些值是否已在內部轉換為HEX或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();
還是這些值已在內部轉換為HEX或DEC?
數據始終是二進制的。 十六進制或十進制只是其表示形式。 您說“變量x的值為123”-這是人類的解釋,實際上變量x是由一些字節組成的內存塊,這些字節本身就是8位的組。
現在,我看到了將這種方式保存為價值的代碼:
uint32_t值= messageContent [0] * 256 + messageContent [0]
這就像我告訴你45
thousands
和123
,讓你建立你的電話號碼為45*1000+123=45123
。 256為2 ^ 8,等於完整字節b'1 0000 0000'。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.