Как я могу преобразовать строку в uint16_t в Arduino?
Строковая переменная будет содержать шестнадцатеричное число, которое нам нужно безопасно поместить в uint16_t
?
Пример:
String hexa = "0x11A0";
uint16_t num = ???;
Помните, мне не нужно переводить в десятичные числа здесь.
то есть мое требование unint16_t num = 0x11A0;
, Мне нужно преобразовать в unint16_t
из шестнадцатеричного числа.
unint16_t
может содержать 0x11A0
, но моя проблема в том, что я не могу получить значение из строковой переменной и сохранить его в unint16_t
,
2 ответа
const short MaxSubs=10;
uint16_t Subs[MaxSubs];
String myStr=String(Node, HEX);
short n=myStr.length();
short k=n;
while(n>0)
{
String sub=myStr.substring(k, n--);
Subs[n]=strtol(sub.c_str(), NULL, 0);
delay(50);`
printf_P(PSTR("%lu: Sub %h \n\r"), millis(), Subs[n]);
}
Вы хотите преобразовать строку, содержащую шестнадцатеричное представление целого числа в целое число?
strtol
могу сделать это.
Помните, что целые числа внутри Arduino - это двоичные числа. Мы заботимся о двоичном, десятичном, восьмеричном и шестнадцатеричном только при представлении значений людям. Большинство микропроцессоров работают с двоичными значениями.
Итак, включите файл в верхней части вашего сценария и используйте strtol
функция для преобразования строки в целое число. Используя 0 в качестве базового аргумента, он будет обрабатывать десятичные, восьмеричные и шестнадцатеричные значения.
#include <stdlib.h>
...
// we use .c_str() to access the underlying C string
int16_t x = strtol(hexa.c_str(), NULL, 0);