首页 > 解决方案 > 如何在 C++(Arduino/C++)中将字符串转换为 uint8_t?

问题描述

我有一个字符串:String outputValue = ""然后我附加到它以构建一个类似 JSON 的结构以发送到远程设备。此代码使用 Arduino 引导加载程序在 ATMEGA328P 上运行。我通过做附加值outputValue += "hello"

我用来发送值的库需要uint8_t *它的有效负载以及该有效负载的相关长度。有什么方法可以将此字符串转换/转换为 uint8_t 数组,或者是否有一种首选方法来进行构建器而不是使用字符串?我愿意接受任何建议

我用来测试库的工作代码具有以下内容。请注意,这只是我将原始 outputValue 复制到记事本,将每个字符用单引号括起来,然后硬编码这个新数组以进行测试的结果:

uint8_t testCmd[] = { '{', '"', 'T', '"', ':', '"', 'A', '1', '"', ',', '"', 'E', '"', ':', '-', '1', ',', '"', 'I', '"', ':', '[', '[', '1', ',', '[', '[', '[', '[', '2', '5', '0', ',', '2', ']', ',', '[', '0', ',', '4', ']', ']', ']', ']', ']', ']', '}' };

ZBTxRequest txReq = ZBTxRequest(coordinatorAddr64, testCmd, sizeof(testCmd));   
ZBTxStatusResponse txResp = ZBTxStatusResponse();

xbee.send(txReq);

标签: c++arduinoatmega

解决方案


就在这里。

做这样的事情:

String testString = "Test String";
uint8_t* pointer = (uint8_t*)testString.c_str();
int length = testString.length();

编辑:

您应该将其应用于您的问题,如下所示:

String testString = "Test String";
uint8_t* pointer = (uint8_t*)testString.c_str();
int length = testString.length();

ZBTxRequest txReq = ZBTxRequest(coordinatorAddr64, pointer, length);   
ZBTxStatusResponse txResp = ZBTxStatusResponse();

xbee.send(txReq);

推荐阅读