C语言 Arduino:整数到字节数组

mrwjdhj3  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(371)

我想通过lora发送一个整数(数据包总数)。我想用前10个字节来存储这个整数。所以对于522,前3个字节是53、50和50。后面是7个零。在这之后,我就有了代表我的有效载荷的字节。
在另一端,我会读取前10个字节,并获得我需要的包计数。
我读了很多帖子,但是我不明白如何将整数转换为字节数组,如果可能的话。我相信有一种更优雅的方法来解决这个问题。

void sendMessage(byte payload[], int length) {  
  int iPt = 552;
  String sPt = String(iPt);
  byte aPt[10];
  sPt.toCharArray(aPt, 10);
  LoRa.beginPacket();   
  LoRa.write(aPt,10);
  LoRa.write(payload, length);
  LoRa.endPacket();  
}

我想在接收端得到的是:53 50 50 0 0 0 0 0 0 0 0.
我得到的是5350500(我猜这个0是空终止?)
我很感激你的帮助谢谢!

gupuwyp2

gupuwyp21#

没有必要将int转换为String,然后再将其转换回char[]
一个int(在Arduino中)是16位或2字节的数据,你可以在两个字节中发送它。

int iPt = 552;

LoRa.beginPacket();   
LoRa.write((uint8_t) iPt >> 8);    // shift the int right by 8 bits, and send as the higher byte
LoRa.write((uint8_t) iPt && 0xFF); // mask out the higher byte and cast it to a byte and send as the lower byte
LoRa.endPacket();

对于那些不熟悉shiftRight operator的人来说,Arduino有两个帮助函数(highByte()lowByte()),适合初学者或不熟悉位操作的人。

int iPt = 552;

LoRa.beginPacket();   
LoRa.write(highByte(iPt)); // send higher byte
LoRa.write(lowByte(iPt);   // send lower byte
LoRa.endPacket();

这两个代码是相同的,第二个更抽象和初学者友好。

相关问题