在c中将十六进制数转换为十进制数

标签 c numbers hex

我正在实现一个程序,将十六进制数转换为十进制数,但我的程序无法正常工作。请帮助我使程序正常运行。

不知道程序的哪一部分有bug。任何建议和答案都会有帮助。

代码:

#include <stdio.h>
#include <math.h>

char hexNum[100];
int getDecimal();

int main(int argc, char **argv) {
    printf("Enter the hex number: ");
    int i = 0;
    char ch;
    while ((ch = getchar()) != '\n') {
        hexNum[i++] = ch;
    }
    hexNum[i] = '\0';
    printf("\nHexadecimal Number is: %s", hexNum);
    int n = getDecimal();
    printf("\nDecimal Number is: " + n);
    return 0;
}

int getDecimal() {
    //get to the units digit index
    int index = 0;
    while (hexNum[index + 1] != '\0') {
        index++;
    }
    //calculate the decimal value and store the result in result var
    int var = 0;  //store the decimal number
    int exp = 0;  //keep track of exponent of 16^x
    while (index >= 0) {
        int ch = hexNum[index--];
        switch (ch) {
        case 'a':
            var = var + (10 * pow(16, exp++));
            break;
        case 'b':
            var = var + (11 * pow(16, exp++));
            break;
        case 'c':
            var = var + (12 * pow(16, exp++));
            break;
        case 'd':
            var = var + (13 * pow(16, exp++));
            break;
        case 'e':
            var = var + (14 * pow(16, exp++));
            break;
        case 'f':
            var = var + (15 * pow(16, exp++));
            break;
        default:   //if its a digit
            var = var + ((ch-'0') * pow(16, exp++));
            break;
        }
    }
    return var;
}

最佳答案

更改此行:

    printf("\nDecimal Number is: " + n);

    printf("\nDecimal Number is: %d\n", n);

而且你的算法太复杂,性能很差。

最好使用前向迭代而不是后向迭代。像这样的东西:

var = 0;
index = 0;
while (hexNum[index]  != '\0')
{
    var = 16 * var;

    switch (hexNum[index]) {
    case 'a':
        var = var + 10;
        break;
    case 'b':
        var = var + 11;
        break;
    ... and so on ...
    }
    ++index;
}
return var;

关于在c中将十六进制数转换为十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42325365/

相关文章:

在 C 中比较浮点值

c - 是否可以手动检查 c 中的内存对齐?

python - 不同数字列表中的第一个公共(public)元素

mysql - 返回列之间范围值的行的函数

javascript - Java 和 JavaScript 相同的 sha256 hex

python - 通过套接字连接将图像从客户端发送到服务器

c - 函数 ‘mknod’ 的隐式声明,但我包含了 header

Android - NDK 共享库使用 nm/objdump 提取相关的 JNI Hook

c++ - 如何在 C++ 中将十六进制值的字符数组转换为单个整数值?

c++ - 如何正确分割字符串中的数字?