鱼C论坛

 找回密码
 立即注册
查看: 849|回复: 7

[已解决]c语言转化16进制

[复制链接]
发表于 2020-4-8 09:37:47 | 显示全部楼层 |阅读模式

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

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

x
求助c语言16进制转化
最佳答案
2020-4-8 13:55:44
#include <stdio.h>
int hex2dec(char* hex,int* index){
    int dec=0,i=0;
    char * str=hex;
    char ch=65;
    while ((ch=*str++)!='\0'){
        (*index)++;
        if (ch>='0' && ch<='9')
            dec=dec*16+ch-'0';
        else if(ch>='A' && ch<='F')
            dec=dec*16+ch-55;
        else if(ch>='a' && ch<='f')
            dec=dec*16+ch-87;  
        else if ((ch==' ' ||ch=='\n'||ch==9)&&dec==0)
            continue;
        else if (dec){
            printf("该字符串只有部分正确,已经转换,剩余部分丢弃。\n");
            break;
        }
        else{
            printf("该字符串格式不正确,无法转换。\n");
            break;
        }
    }
    return dec;
}
int main(void) {
    char hex[100];
    int dec,index=-1;//index表示转换部分的下标
    scanf("%s",hex);
    dec=hex2dec(hex,&index);
    char *hex1=new char [index];
    hex1=hex;
    hex1[index]='\0';//若原字符串不需要了,这三行可以去掉,直接在原字符串上修改,hex[index-1]='\0';
    if (index)
        printf("%s转为十进制为%d",hex1,dec);
    delete []hex1;
        return 0;
}

这个判断合法的函数怎么写啊

这个判断合法的函数怎么写啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-8 10:10:35 | 显示全部楼层

回帖奖励 +4 鱼币

对每个字符进行判断
超过f的字符非法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 13:55:44 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
int hex2dec(char* hex,int* index){
    int dec=0,i=0;
    char * str=hex;
    char ch=65;
    while ((ch=*str++)!='\0'){
        (*index)++;
        if (ch>='0' && ch<='9')
            dec=dec*16+ch-'0';
        else if(ch>='A' && ch<='F')
            dec=dec*16+ch-55;
        else if(ch>='a' && ch<='f')
            dec=dec*16+ch-87;  
        else if ((ch==' ' ||ch=='\n'||ch==9)&&dec==0)
            continue;
        else if (dec){
            printf("该字符串只有部分正确,已经转换,剩余部分丢弃。\n");
            break;
        }
        else{
            printf("该字符串格式不正确,无法转换。\n");
            break;
        }
    }
    return dec;
}
int main(void) {
    char hex[100];
    int dec,index=-1;//index表示转换部分的下标
    scanf("%s",hex);
    dec=hex2dec(hex,&index);
    char *hex1=new char [index];
    hex1=hex;
    hex1[index]='\0';//若原字符串不需要了,这三行可以去掉,直接在原字符串上修改,hex[index-1]='\0';
    if (index)
        printf("%s转为十进制为%d",hex1,dec);
    delete []hex1;
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 18:09:30 | 显示全部楼层
转载于https://blog.csdn.net/zhangjianjun521/article/details/79081435
#include <stdio.h>
#include <string.h>
 
/* 十六进制数转换为十进制数 */
long hexToDec(char *source);
 
/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch);
 
int main()
{
    char *hex = "75BCD15";
 
    printf("16进制数:\t%s\n", hex);
    printf("10进制数:\t%ld\n", hexToDec(hex));
 
    return 0;
}
 
/* 十六进制数转换为十进制数 */
long hexToDec(char *source)
{
    long sum = 0;
    long t = 1;
    int i, len;
 
    len = strlen(source);
    for(i=len-1; i>=0; i--)
    {
        sum += t * getIndexOfSigns(*(source + i));
        t *= 16;
    }  
 
    return sum;
}
 
/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch)
{
    if(ch >= '0' && ch <= '9')
    {
        return ch - '0';
    }
    if(ch >= 'A' && ch <='F') 
    {
        return ch - 'A' + 10;
    }
    if(ch >= 'a' && ch <= 'f')
    {
        return ch - 'a' + 10;
    }
    return -1;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2020-4-14 16:31:37 | 显示全部楼层

大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-14 16:41:59 | 显示全部楼层
nbuzjj123 发表于 2020-4-14 16:31
大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误

提示什么错误,你倒是说出来啊。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-14 16:44:53 | 显示全部楼层
nbuzjj123 发表于 2020-4-14 16:31
大兄弟为什么在devc++5.11上貌似运行有问题哎第32行显示有误

我猜应该是动态创建数组的问题。
你可以将这一行修改一下
#include <stdlib.h>//程序前面需要加上这个头文件哟
char *hex1=(char*) malloc (index * sizeof(char));
另外,这里并不是重点吧。重点是前面的函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-14 17:40:59 | 显示全部楼层
sunrise085 发表于 2020-4-14 16:44
我猜应该是动态创建数组的问题。
你可以将这一行修改一下

ok了,刚才有事情不在,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 06:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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