簡體   English   中英

將rs232消息保存到變量

[英]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 thousands123 ,讓你建立你的電話號碼為45*1000+123=45123 256為2 ^ 8,等於完整字節b'1 0000 0000'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM