2

我有一个包含数字和字符值的字符串,例如“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 的转换引起的

4

2 回答 2

4

看看这里

uint8_t dataArray[dataString.length()];
dataString.toCharArray(dataArray, dataString.length())
于 2016-03-31T15:59:21.560 回答
4

使用getByteshttps://www.arduino.cc/en/Reference/StringGetBytes)将字符串中的字节复制到数组中。这需要byte[], 除非https://www.arduino.cc/en/Reference/byte积极误导应该与uint8_t[].

您将需要阵列已经存在并且足够大。length您可以使用它的方法找到字符串的长度。

(如果它绝对是你想要的,我认为它getBytes是首选。)toCharArrayuint8_t[]

对您的代码的一些评论

以上是在 Engo 发布一些代码之前编写的,并试图简单地回答这个问题。但这里有一些关于代码的注释。

  • 调用几乎可以肯定不是你想要的sizeofString一个String对象可能包括其他东西(例如,长度信息)并且可能包括实际字节(例如可能在指针后面)。有length方法;用它。(请记住,由于终止空字符,您的缓冲区需要大一个字节。)
  • 我不知道魔术数字发生了什么addr64(我对xBee一无所知),但会假设你在那里做的事情是有道理的——但它看起来像是一种值得仔细检查的事情。
  • 你说你“得到一个奇怪的输出”,但如果你告诉我们究竟是什么样的奇怪输出,以及当你改变你试图传输的字符串时它如何(如果有的话)改变,它会更有用。
  • 您的代码引用了我认为的变量,称为rx,但您没有向我们展示它是如何声明的。
  • ZBRxResponse似乎有一个名为getDataOffset. 再说一次,我对这些东西一无所知,但是你实际上试图从响应中提取的东西可能不是从偏移量 0 开始,而是从调用给定的偏移量开始getDataOffset
于 2016-03-31T16:00:20.837 回答