鱼C论坛

 找回密码
 立即注册
查看: 1899|回复: 2

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

[复制链接]
发表于 2023-11-8 18:59:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
       
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-8 19:00:09 | 显示全部楼层
问题出在trans函数中的转换方式。在该函数中,将字符a转换为整数b的方式是通过使用int(a)来实现的。然而,这种转换方式只会将字符a的ASCII码值转换为对应的整数值,并不会将十六进制数转换为十进制数。

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

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

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

下面是修改后的代码:

  1. #include<iostream>
  2. using namespace std;

  3. int hexToDec(char a)
  4. {
  5.     if (a >= '0' && a <= '9')
  6.     {
  7.         return a - '0';
  8.     }
  9.     else if (a >= 'A' && a <= 'F')
  10.     {
  11.         return a - 'A' + 10;
  12.     }
  13.     else if (a >= 'a' && a <= 'f')
  14.     {
  15.         return a - 'a' + 10;
  16.     }
  17.     else
  18.     {
  19.         return -1; // 非法输入
  20.     }
  21. }

  22. int main()
  23. {
  24.     char a;
  25.     cout << "请输入一个十六进制数:";
  26.     cin >> a;
  27.    
  28.     int dec = hexToDec(a);
  29.     if (dec != -1)
  30.     {
  31.         cout << dec << endl;
  32.     }
  33.     else
  34.     {
  35.         cout << "输入的不是有效的十六进制数" << endl;
  36.     }
  37.    
  38.     return 0;
  39. }
复制代码


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

在main函数中,我们调用hexToDec函数将十六进制数转换为十进制数,并进行了一些错误处理,以防止输入非法的十六进制数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-9 15:38:21 | 显示全部楼层
  1. #include <iostream>
  2. using namespace std;
  3. int trans(char a[])
  4. {
  5.         int b , c , f , i                                               ;
  6.         for(b = i = 0 , f = 1 ; a[i] && f ; i ++) {
  7.                 if(a[i] >= '0' && a[i] <= '9') c = a[i] - '0'           ;
  8.                 else if(a[i] >= 'A' && a[i] <= 'F') c = a[i] - 'A' + 10 ;
  9.                 else if(a[i] >= 'a' && a[i] <= 'f') c = a[i] - 'a' + 10 ;
  10.                 else {
  11.                         cout << "输入中含有无效字符" << endl            ;
  12.                         b = -1                                          ;
  13.                         f = 0                                           ;
  14.                 }
  15.                 if(f) b = b * 16 + c                                    ;
  16.         }
  17.         return b                                                        ;
  18. }

  19. int main(void)
  20. {
  21.         char a[256]                                                     ;
  22.         cout<<"请输入一个十六进制数:"                                  ;
  23.         cin>>a                                                          ;
  24.       
  25.         cout<<trans(a)<<endl                                            ;
  26.       
  27.         return 0                                                        ;
  28.       
  29. }
复制代码

        编译、运行实况:
  1. D:\[exercise]\C>g++ -o x x.c

  2. D:\[exercise]\C>x
  3. 请输入一个十六进制数:200
  4. 512

  5. D:\[exercise]\C>x
  6. 请输入一个十六进制数:100
  7. 256

  8. D:\[exercise]\C>x
  9. 请输入一个十六进制数:400
  10. 1024

  11. D:\[exercise]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表