如何递归地将十六进制转换为十进制
How to convert hexadecimal to decimal recursively
我需要做这个转换,但没有头绪。有人能帮我吗?我需要这个来完成基本转换的计算器。我还需要函数 return 一个整数来转换以在我的其他函数中使用。
PS:抱歉我的英语不好。
我希望 11F 是整数 287。
如果它最多适合 unsigned long long
,您可以使用 stdlib.h 中的 strtoul
/strtoull
将其从 base-16 字符串解析为整数。
然后您可以简单地以 10 为基数打印该整数。
#include <stdlib.h>
#include <stdio.h>
int main()
{
char const *hex = "11F";
char *endptr;
unsigned long ul = strtoul(hex,&endptr,16);
printf("%lu\n", ul);
}
这是递归的东西:
int hexToBase10(const std::string& number, size_t pos = 0) {
if (pos == number.length())
return 0;
char digit = number[number.size() - pos - 1];
int add = digit >= '0' && digit <= '9' ? digit - '0'
: digit - 'A' + 10;
return 16 * hexToBase10(number, pos + 1) + add;
}
这样称呼它:
hexToBase10("11F"); // 287
顺便说一句,使用std::hex
似乎更安全。
我需要做这个转换,但没有头绪。有人能帮我吗?我需要这个来完成基本转换的计算器。我还需要函数 return 一个整数来转换以在我的其他函数中使用。
PS:抱歉我的英语不好。
我希望 11F 是整数 287。
如果它最多适合 unsigned long long
,您可以使用 stdlib.h 中的 strtoul
/strtoull
将其从 base-16 字符串解析为整数。
然后您可以简单地以 10 为基数打印该整数。
#include <stdlib.h>
#include <stdio.h>
int main()
{
char const *hex = "11F";
char *endptr;
unsigned long ul = strtoul(hex,&endptr,16);
printf("%lu\n", ul);
}
这是递归的东西:
int hexToBase10(const std::string& number, size_t pos = 0) {
if (pos == number.length())
return 0;
char digit = number[number.size() - pos - 1];
int add = digit >= '0' && digit <= '9' ? digit - '0'
: digit - 'A' + 10;
return 16 * hexToBase10(number, pos + 1) + add;
}
这样称呼它:
hexToBase10("11F"); // 287
顺便说一句,使用std::hex
似乎更安全。