【问题标题】:convert HEX string to Decimal in arduino在arduino中将十六进制字符串转换为十进制
【发布时间】:2015-08-05 10:38:38
【问题描述】:

我有一个像这样的十六进制字符串:“0005607947”并想将其转换为十进制数,我在this site 上对其进行测试,它正确转换为十进制数,答案是:“90208583”但是当我使用此代码时我得到错误的价值! 我的代码哪里错了,或者确实有任何一个,针对这个问题的一些新代码?

long int decimal_answer = getDEC("0005607947") ;

long int getDEC(String str110) {
   long int ID = 0 ;
   int len = str110.length() ;
   char buff[len] ;
   int power = 0 ;

   for(int i = 0 ; i <len ; i++) {  buff[i] = str110.charAt(i); }

   for(int i = (len-1) ; i >=0 ; i--) { 
      int num = buff[i] - '0' ;
      ID = ID + num * pow(16 , power) ;
      power = power + 1 ;   
     }
    Serial.println(String(ID , DEC));
  return ID ;
}



// thanks , i also use this but , get error : invalid conversion from 'void*' to  'char**' [-fpermissive]
unsigned int SiZe = sizeof(F_value) ;
char charBuf[SiZe];
F_value.toCharArray(charBuf , SiZe);

long decimal_answer = strtol(charBuf , NULL , 16);
Serial.println(decimal_answer , DEC);

【问题讨论】:

  • 可以存储 90208583 吗?尝试长整数

标签: arduino hex decimal arduino-uno


【解决方案1】:

删除所有代码,只使用标准库中的“strtol”。

 #include <stdlib.h>
 long strtol (const char *__nptr, char **__endptr, int __base)

供您使用:

long decimal_answer = strtol("0005607947", NULL, 16);

【讨论】:

    【解决方案2】:

    您正在尝试将值 90208583 存储在 int 中。 Arduino 有一个 2 字节的 int 大小,这意味着您可以存储的最大数字是 2^16-1 (65535)。您有两种选择:

    1. 使用无符号整数
      • 分钟数:0
      • 最大数量:4,294,967,295
      • 缺点:只能用于正数
    2. 使用长整数
      • 分钟数:-2,147,483,648
      • 最大数量:2,147,483,647

    【讨论】:

    • ,我把它改成了'long',但第5个数字是正确的,但其余的都不正确!!新答案是:90208464(正确:90208583)
    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2018-01-31
    • 2012-02-03
    • 2016-03-06
    • 1970-01-01
    • 2022-07-22
    相关资源
    最近更新 更多