十六进制到十进制的转换(使用隐式类型转换)

hexa-decimal to decimal conversion (using implicit type casting)

我认为我的 vs 代码中存在一些问题我是这个编码的新手,即使在编写了正确的代码之后它几乎在我编写的每一秒代码中都会给我错误的结果我得到不确定的结果请各位帮我解决这个问题,请在您的机器中检查 运行 此代码....

#include <iostream>
using namespace std;
int main()
{

    char a[30];
    cout << "enter the hexadecimal";
    cin >> a;
    int i = 0, c, digit, decimal = 0, p = 1;
    while (a[i] != '[=10=]') {
        i++;
    }
    for (int j = i; j >= 0; j--) {
        c = a[j];
        if (c >= 48 && c <= 57) {
            digit = c - 48;
        }
        else if (c >= 97 && c <= 112) {
            digit = c - 87;
        }
        decimal += digit * p;
        p *= 8;
    }
    cout << "\ndecimal is " << decimal;
    return 0;
}

输入十六进制时请只输入小写字母我没有考虑大写字母

要将十六进制转换为十进制,请使用此站点https://www.rapidtables.com/convert/number/hex-to-decimal.html?x=146

代码有几个问题,但我认为最主要的问题是你将 p 乘以 8,而它应该是 16(因为十六进制是 base-16,而不是 base-8)。

您还应注意无效输入。例如,如果有人输入无效字母 'j' 会怎样?

此外,当您计算字符串的初始长度时,您将 i 设置为具有 '\0' 值的数组位置,因此当您开始处理输入时,a[i] 为 0 导致使用未初始化的变量(digit 未赋值,这与之前的“无效输入”问题有关)。

顺便说一句,我也会在比较中使用字符而不是 ASCII 码,这样更容易看到您要查找的内容:

    if (c >= '0' && c <= '9') {
        digit = c - '0';
    }

等等...