| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4509 人关注过本帖
标题:对于十六进制字符串转换成十进制的程序我怎么做不对啊
只看楼主 加入收藏
Zzling_001
Rank: 1
来 自:安徽阜阳
等 级:新手上路
帖 子:13
专家分:7
注 册:2015-12-10
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:12 
对于十六进制字符串转换成十进制的程序我怎么做不对啊
#include<stdio.h>
#include<math.h>
int main()
{
    long a=0;
    int i,n;
    char hex[9];
    printf("Input hex:");
    gets(hex);
    for(i=0;hex[i]!='\0';i++)
    {
        n=i;
    }
    for(i=0;hex[i]!='\0';i++)
    {
        a+=hex[i]*pow(16,n-1);
    }
    printf("%ld\n",a);
    return 0;
}



程序能运行  但答案是错误的  为什么呢??
搜索更多相关主题的帖子: 十进制 return include 十六进制 字符串 
2015-12-13 21:54
Zzling_001
Rank: 1
来 自:安徽阜阳
等 级:新手上路
帖 子:13
专家分:7
注 册:2015-12-10
收藏
得分:0 
   为甚么 没有大神帮我呢。。实在是不知道哪里错了 ,,应该是自己进入了一个死胡同   感觉自己的程序是没有问题的,,可是答案却不对
2015-12-13 22:50
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:7 
目测至少有二个问题,1A~1F你这么计算?第二,得到位数的n木有变化,你怎么得到正确的x*16的n次方?
2015-12-13 23:34
Zzling_001
Rank: 1
来 自:安徽阜阳
等 级:新手上路
帖 子:13
专家分:7
注 册:2015-12-10
收藏
得分:0 
回复 3楼 newdos
对哦,,我把程序改成了这样
#include<stdio.h>
#include<math.h>
int main()
{
    long a=0;
    int i,n;
    char hex[9];
    printf("Input hex:");
    gets(hex);
    for(i=0;hex[i]!='\0';i++)
    {
        n=i;
    }
    for(i=0;hex[i]!='\0';i++)
    {
        a+=hex[i]*pow(16,n-1-i);
    }
    printf("%ld\n",a);
    return 0;
}
算是解决了16的次方问题   那么你说的1A~1E是什么意思呢??
2015-12-14 21:38
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
16进制是0-9,A,B,C,DE,F组成的,A=10,B=11。。。F=15,   如果16进制数为1A,换算成10进制就是16+10=26。

你的程序接收的数据不是上面的数这么办?是数字的话,你也木有转换成对应的数啊,怎么得到正确的结果?

[此贴子已经被作者于2015-12-14 23:58编辑过]

2015-12-14 23:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
程序代码:
#include <stdio.h>
#include <string.h>

int mypow(int x,int n)
{
    if(n==0) return 1;
    int t=1;
    for(;n>0;t*=x,n--);
    return t;
}

bool hex_check(char* s)
{
    bool result=true;
    for(;*s!='\0';s++)
    {
        if(*s<'0' || (*s>'9' && *s<'A') || (*s>'F' && *s<'a') || *s>'f') 
        {
            result=false;
            break;
        }
    }
    return result;
}
int conv(char* s)
{
    int t=0;
    int i=0;
    if(hex_check(s))
    {
        int ln=(int)strlen(s)-1;
        for(;ln>=0;ln--,i++)
        {
            if(s[ln]>='0' && s[ln]<='9') t+=(s[ln]-0x30)*mypow(16,i);
            if(s[ln]>='a' && s[ln]<='f') t+=(s[ln]-0x57)*mypow(16,i);
            if(s[ln]>='A' && s[ln]<='F') t+=(s[ln]-0x37)*mypow(16,i);
        }
    }
    else return -1;
    return t;
}

int main(void)
{
    char * b="3456";
    char * c="282ABF";
    char * d="abCDeF";
    printf("\n%s(X)=%d(D)\n",b,conv(b));
    printf("%s(X)=%d(D)\n",c,conv(c));
    printf("%s(X)=%d(D)\n",d,conv(d));
    return 0;
}


欢迎测试

DO IT YOURSELF !
2015-12-15 09:06
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
俺测试了一下:
char * f="0xfffe";
char * f= 0;
char * f= "";
2015-12-15 09:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
char * f="0xfffe";  这个我会认为是非法16进制字串   而16进制 x=0xfffe  本身就是int类型  不需要转换

DO IT YOURSELF !
2015-12-15 10:24
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
呵.呵,那个问题不大,主要还是整数数据溢出问题。
楼主能简单实现就行了。
2015-12-15 10:45
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:7 
如果不考虑溢出,应该不需要太复杂,代码如下:
程序代码:
#include <stdio.h>
int hextodec(char *p)
{
    int i,j,s,a[]={48,7,32};
    char b[10];
    for(i=0;i<10;i++)b[i]=p[i];  //复制16进制数
    for(i=0,s=0;b[i];i++)
    {
        j=0;
        while(j<3&&b[i]>15)b[i]-=a[j++]; //将字符转换为数
        if(b[i]>15||b[i]<0)return -1;    //如果数据不是16进制格式则返回-1
        s=s*16+b[i];                     //转换到10进制
    }
    return s;
}

void main()
{
    int i;
    i=hextodec("AbCdE");
    printf("%d,%d\n",i,0xabcde);          //输出两个相对应的十六进制数比较转换是否正确
}

能编个毛线衣吗?
2015-12-15 11:40
快速回复:对于十六进制字符串转换成十进制的程序我怎么做不对啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024610 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved