c - 如何在 Arduino 上将字符串转换为 uint8_t 数组?

标签 c string arduino xbee uint8t

我有一个包含数字和字符值的字符串,例如“p1200”。我需要将该字符串转换为 uint8_t 数组,因为我需要从我的 xBee 发送它。

我怎样才能转换

String dataString = "p1200"

进入

uint8_t 数据数组[]

?

我尝试使用以下代码发送此字符串:

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 时,我得到了一个奇怪的输出... 我以为是string到uint8_t的转换导致的

最佳答案

使用 getBytes ( https://www.arduino.cc/en/Reference/StringGetBytes ) 将字符串中的字节复制到数组中。这需要一个 byte[],除非 https://www.arduino.cc/en/Reference/byte具有误导性,应该与 uint8_t[] 相同。

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

(我认为 getBytes 优于 toCharArray 如果它绝对是您想要的 uint8_t[]。)

对您的代码的一些评论

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

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

关于c - 如何在 Arduino 上将字符串转换为 uint8_t 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338134/

相关文章:

c - 在AVR汇编中,代码执行后寄存器r24的值是多少?

shell - arduino yun与USB声卡获取文件数

python - 与 arduino 代码交互的 Pyserial 无法正常工作

c - winsock2:原始套接字 recvfrom() 返回错误 10022(无效参数)

c - c中的bsearch函数

string - MATLAB 字符串处理

Python字符串分割多个括号

c - qsort与功能比较器不同

c - 为什么会出现段错误(核心已转储)但没有错误和警告?

python - 查找符号的小写(移位)形式