如何在 C++ (Arduino/C++) 中将字符串转换为 uint8_t?
How can I convert a String to a uint8_t in C++ (Arduino/C++)?
我有一个字符串:String outputValue = ""
,然后我附加到它以构建一个类似于 JSON 的结构以发送到远程设备。此代码使用 Arduino 引导加载程序在 ATMEGA328P 上运行。我通过 outputValue += "hello"
.
附加值
我用来发送值的库需要一个 uint8_t *
作为它的有效载荷以及该有效载荷的相关长度。有没有什么方法可以将此字符串 cast/convert 转换为 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);
是的。
做这样的事情:
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);
你可以这样写你的数组:
uint8_t testCmd[] = R"({"T":"A1","E":-1,"I":[[1,[[[[250,2],[0,4]]]]]]})";
不同之处在于它将有 48 个元素而不是原来的 47 个元素,因为终止值为 0。由于您提供了数据包的长度,您可以 -1 它:
ZBTxRequest txReq = ZBTxRequest(coordinatorAddr64, testCmd, sizeof(testCmd) - 1);
ZBTxStatusResponse txResp = ZBTxStatusResponse();
xbee.send(txReq);
查看 Arduino 参考资料。 String
对象有 c_str() method as well as length()。所以你可以简单地尝试:
String testCmd R"({"T":"A1","E":-1,"I":[[1,[[[[250,2],[0,4]]]]]]})";
ZBTxRequest txReq = ZBTxRequest(coordinatorAddr64, (uint8_t *)testCmd.c_str(), (uint8_t)testCmd.length());
ZBTxStatusResponse txResp = ZBTxStatusResponse();
xbee.send(txReq);
我有一个字符串:String outputValue = ""
,然后我附加到它以构建一个类似于 JSON 的结构以发送到远程设备。此代码使用 Arduino 引导加载程序在 ATMEGA328P 上运行。我通过 outputValue += "hello"
.
我用来发送值的库需要一个 uint8_t *
作为它的有效载荷以及该有效载荷的相关长度。有没有什么方法可以将此字符串 cast/convert 转换为 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);
是的。
做这样的事情:
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);
你可以这样写你的数组:
uint8_t testCmd[] = R"({"T":"A1","E":-1,"I":[[1,[[[[250,2],[0,4]]]]]]})";
不同之处在于它将有 48 个元素而不是原来的 47 个元素,因为终止值为 0。由于您提供了数据包的长度,您可以 -1 它:
ZBTxRequest txReq = ZBTxRequest(coordinatorAddr64, testCmd, sizeof(testCmd) - 1);
ZBTxStatusResponse txResp = ZBTxStatusResponse();
xbee.send(txReq);
查看 Arduino 参考资料。 String
对象有 c_str() method as well as length()。所以你可以简单地尝试:
String testCmd R"({"T":"A1","E":-1,"I":[[1,[[[[250,2],[0,4]]]]]]})";
ZBTxRequest txReq = ZBTxRequest(coordinatorAddr64, (uint8_t *)testCmd.c_str(), (uint8_t)testCmd.length());
ZBTxStatusResponse txResp = ZBTxStatusResponse();
xbee.send(txReq);