我有一个包含数字和字符值的字符串,例如“p1200”。我需要将此字符串转换为uint8_t数组,因为我需要从我的xBee发送它。
如何转换
String dataString = "p1200"
到
uint8_t dataArray[]
?
我尝试使用以下代码发送此字符串:
power = ((360 * pulseCount) / 60);
String dataString = "p" + power;
char dataArray[sizeof(dataString)];
dataString.toCharArray(dataArray, sizeof(dataString));
XBeeAddress64 addr64 = XBeeAddress64();
addr64.setMsb(0x13A200);
addr64.setLsb(0x406A42B7);
ZBTxRequest zbTx = ZBTxRequest(addr64, (uint8_t *)dataArray, sizeof(dataArray));
xbee.send(zbTx);
并使用以下代码接收字符串:
String incomingData;
xbee.readPacket();
if (xbee.getResponse().isAvailable()) {
Serial.println(xbee.getResponse().getApiId());
if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
xbee.getResponse().getZBRxResponse(rx);
for (int i = 0; i < rx.getDataLength(); i++) {
incomingData += (char)rx.getData(i);
}
}
}
当我打印incomingData
时,我得到一个奇怪的输出......
我认为这是由字符串转换为uint8_t
答案 0 :(得分:3)
看看HERE
uint8_t dataArray[dataString.length()];
dataString.toCharArray(dataArray, dataString.length())
答案 1 :(得分:3)
使用getBytes
(https://www.arduino.cc/en/Reference/StringGetBytes)将字符串中的字节复制到数组中。这需要byte[]
,除非https://www.arduino.cc/en/Reference/byte具有误导性,否则应与uint8_t[]
相同。
您需要阵列已经存在并且足够大。您可以使用length
方法找到字符串的长度。
(我认为getBytes
优先于toCharArray
,如果它绝对是你想要的uint8_t[]
。)
对您的代码的一些评论
以上内容是在Engo发布一些代码之前编写的,并试图回答这个问题。但是这里有一些关于代码的评论。
sizeof
上拨打String
几乎肯定不是您想要的。 String
对象可以包括其他内容(例如,长度信息)并且可以不包括实际字节(其可以例如在指针之后)。有length
方法;用它。 (记住,由于终止空字符,你的缓冲区需要大一个字节。)addr64
中的魔术数字是怎么回事(我对xBee一无所知)但会假设你在那里做了什么有道理 - 但它看起来像是值得仔细检查的东西。rx
,但您还没有向我们展示它是如何声明的。ZBRxResponse
似乎有一个名为getDataOffset
的方法。再一次,我对这些东西一无所知,但是你实际上试图从响应中撤出的东西可能不是从偏移0开始,而是在调用getDataOffset
时给出的偏移量?