【问题标题】:How can I convert a string to uint16_t in Arduino?如何在 Arduino 中将字符串转换为 uint16_t?
【发布时间】:2017-07-12 11:22:25
【问题描述】:

字符串变量将包含一个十六进制,我们需要将其安全地放在uint16_t?

例子:

String hexa = "0x11A0";
uint16_t num = ???;

记住,我这里不需要转换成十进制。
即我的要求是unint16_t num = 0x11A0;。我需要从十六进制转换为unint16_t

unint16_t 可以包含0x11A0,但是我的问题是我无法从字符串变量中获取值并将其保存在unint16_t 中。

【问题讨论】:

标签: string arduino uint16


【解决方案1】:

您想将包含整数的十六进制表示的字符串转换为整数吗?

strtol 可以做到这一点。

记住,Arduino 内部的整数是二进制数字。只有在向人类呈现值时,我们才关心二进制、十进制、八进制和十六进制。大多数微处理器对二进制值进行操作。

因此,在脚本顶部包含一个文件,并使用strtol 函数将字符串转换为整数。通过将 0 用作 base 参数,它将处理十进制、八进制和十六进制格式的值。

#include <stdlib.h>
...
// we use .c_str() to access the underlying C string
int16_t x = strtol(hexa.c_str(), NULL, 0);

【讨论】:

  • 我明白你的意思,但这无助于解决问题。看看我什么时候按照你的建议做,int16_t 只包含长整数,但是我希望将十六进制本身放在 int16_t 中。我之所以确定它是可能的,是因为我可以直接将十六进制保存到 int16_t,即 int16_t = 0x11A0,但无法从字符串中获取十六进制并将其保存到 int16_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]);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 2015-08-03
    • 2020-07-30
    • 2021-10-09
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    相关资源
    最近更新 更多