Как я могу преобразовать строку в 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);
Другие вопросы по тегам