字符串变量将包含一个十六进制,我们需要将其安全地放在uint16_t
?
例子:
String hexa = "0x11A0";
uint16_t num = ???;
请记住,我不需要在这里转换为十进制。
即我的要求是,unint16_t num = 0x11A0;
。我需要unint16_t
从十六进制转换为。
unint16_t
可以包含0x11A0
,但是我的问题是我无法从字符串变量中获取值并将其保存在unint16_t
.
您想将包含整数的十六进制表示的字符串转换为整数吗?
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);
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]);
}