Как я могу преобразовать строку в uint8_t в C ++ (Arduino / C ++)?

У меня есть строка: String outputValue = "" Затем я добавляю JSON-подобную структуру для отправки на удаленное устройство. Этот код выполняется на ATMEGA328P с использованием загрузчика Arduino. Я добавляю значения, делая 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);

0

Решение

Да, есть.

Сделайте что-то вроде этого:

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);
2

Другие решения

Вы можете написать свой массив следующим образом:

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 () метод, а также длина (). Так что вы можете просто попробовать:

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);
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector