王鹿其 发表于 2023-11-8 18:59:09

十六进制数转化为十进制数,问题出在哪

#include<iostream>
using namespace std;
int trans(char a)
{
        int b=int(a);
        return b;
}

int main()
{
        char a;
        cout<<"请输入一个十六进制数:";
        cin>>a;
       
        cout<<trans(a)<<endl;
       
        return 0;
       
}

isdkz 发表于 2023-11-8 19:00:09

问题出在trans函数中的转换方式。在该函数中,将字符a转换为整数b的方式是通过使用int(a)来实现的。然而,这种转换方式只会将字符a的ASCII码值转换为对应的整数值,并不会将十六进制数转换为十进制数。

要将十六进制数转换为十进制数,可以使用以下方式:

1. 首先,需要将十六进制数的每一位转换为对应的十进制数。可以通过以下规则进行转换:
   · 对于0-9的十六进制数字,其对应的十进制数与其本身相等。
   · 对于A-F的十六进制数字,其对应的十进制数分别为10-15。

2. 然后,将每一位的十进制数乘以对应的权重,再将它们相加得到最终的十进制数。

下面是修改后的代码:

#include<iostream>
using namespace std;

int hexToDec(char a)
{
    if (a >= '0' && a <= '9')
    {
      return a - '0';
    }
    else if (a >= 'A' && a <= 'F')
    {
      return a - 'A' + 10;
    }
    else if (a >= 'a' && a <= 'f')
    {
      return a - 'a' + 10;
    }
    else
    {
      return -1; // 非法输入
    }
}

int main()
{
    char a;
    cout << "请输入一个十六进制数:";
    cin >> a;
   
    int dec = hexToDec(a);
    if (dec != -1)
    {
      cout << dec << endl;
    }
    else
    {
      cout << "输入的不是有效的十六进制数" << endl;
    }
   
    return 0;
}


在修改后的代码中,我们定义了一个新的函数hexToDec,用于将十六进制数转换为十进制数。在该函数中,我们根据输入的字符a的值,判断其是0-9的数字还是A-F的字母,然后返回对应的十进制数。

在main函数中,我们调用hexToDec函数将十六进制数转换为十进制数,并进行了一些错误处理,以防止输入非法的十六进制数。

jackz007 发表于 2023-11-9 15:38:21

#include <iostream>
using namespace std;
int trans(char a[])
{
      int b , c , f , i                                             ;
      for(b = i = 0 , f = 1 ; a && f ; i ++) {
                if(a >= '0' && a <= '9') c = a - '0'         ;
                else if(a >= 'A' && a <= 'F') c = a - 'A' + 10 ;
                else if(a >= 'a' && a <= 'f') c = a - 'a' + 10 ;
                else {
                        cout << "输入中含有无效字符" << endl            ;
                        b = -1                                          ;
                        f = 0                                           ;
                }
                if(f) b = b * 16 + c                                    ;
      }
      return b                                                      ;
}

int main(void)
{
      char a                                                   ;
      cout<<"请输入一个十六进制数:"                                  ;
      cin>>a                                                          ;
      
      cout<<trans(a)<<endl                                          ;
      
      return 0                                                      ;
      
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
请输入一个十六进制数:200
512

D:\\C>x
请输入一个十六进制数:100
256

D:\\C>x
请输入一个十六进制数:400
1024

D:\\C>
页: [1]
查看完整版本: 十六进制数转化为十进制数,问题出在哪