在arduino中将十六进制字符串转换为十进制
convert HEX string to Decimal in arduino
我有一个像这样的十六进制字符串:“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);
删除所有代码,只使用标准库中的 'strtol'。
#include <stdlib.h>
long strtol (const char *__nptr, char **__endptr, int __base)
供您使用:
long decimal_answer = strtol("0005607947", NULL, 16);
您正在尝试将值 90208583 存储在一个 int 中。 Arduino 有一个 2 字节的 int 大小,这意味着您可以存储的最大数字是 2^16-1 (65535)。您有几个选择:
- 使用无符号整数
- 最小数量:0
- 最大数量:4,294,967,295
- 缺点:只能用于正数
- 使用长整型
- 最小数量:-2,147,483,648
- 最大数量:2,147,483,647
我有一个像这样的十六进制字符串:“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);
删除所有代码,只使用标准库中的 'strtol'。
#include <stdlib.h>
long strtol (const char *__nptr, char **__endptr, int __base)
供您使用:
long decimal_answer = strtol("0005607947", NULL, 16);
您正在尝试将值 90208583 存储在一个 int 中。 Arduino 有一个 2 字节的 int 大小,这意味着您可以存储的最大数字是 2^16-1 (65535)。您有几个选择:
- 使用无符号整数
- 最小数量:0
- 最大数量:4,294,967,295
- 缺点:只能用于正数
- 使用长整型
- 最小数量:-2,147,483,648
- 最大数量:2,147,483,647