鱼C论坛

 找回密码
 立即注册
查看: 1017|回复: 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;
       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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函数将十六进制数转换为十进制数,并进行了一些错误处理,以防止输入非法的十六进制数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i] && f ; i ++) {
                if(a[i] >= '0' && a[i] <= '9') c = a[i] - '0'           ;
                else if(a[i] >= 'A' && a[i] <= 'F') c = a[i] - 'A' + 10 ;
                else if(a[i] >= 'a' && a[i] <= 'f') c = a[i] - 'a' + 10 ;
                else {
                        cout << "输入中含有无效字符" << endl            ;
                        b = -1                                          ;
                        f = 0                                           ;
                }
                if(f) b = b * 16 + c                                    ; 
        }
        return b                                                        ;
}

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

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

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

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

D:\[exercise]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-1 21:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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