| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1012 人关注过本帖, 1 人收藏
标题:十六进制转十进制。问题在哪里呢?
只看楼主 加入收藏
cdutzh101
Rank: 2
等 级:论坛游民
帖 子:43
专家分:64
注 册:2009-8-20
结帖率:50%
收藏(1)
已结贴  问题点数:20 回复次数:9 
十六进制转十进制。问题在哪里呢?
我自己弄了个很撇的程序,不要笑话哈。运行后没结果,请帮助分析下。谢谢
#include "stdio.h"
#include "string.h"
#include "math.h"
void main()
{
    char a[17]={"0123456789ABCDEF"};
    char c[20];
    int b[16]={'0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'};
    int i=0,j=0;
    int m,n,num=0;
    gets(c);
        m=strlen(c);
        for(i=0;i<m;i++)
        {
            for(j=0;j<16;j++)
            {
                if(c[i]==a[j])
                {
                    n=j;
                    num=num+b[j]*pow(16,(m-i-1));
                }
            }
        }
printf("该十六进制的值为:%d",num);
}
搜索更多相关主题的帖子: 十进制 十六进制 
2010-11-30 23:21
liquan1989
Rank: 2
等 级:论坛游民
帖 子:27
专家分:12
注 册:2010-1-18
收藏
得分:0 
16静止转10 直接输出的时候 换成%x
int main(void)
{
    int i;
    scanf("%d",&i);
    printf("%#x",i);
return 0;
}
即可
2010-12-01 00:39
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 楼主 cdutzh101
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
    printf("input a hexadecimal number:\n");
    char numHex[100];
    gets(numHex);
   
    int numDecimal = 0;
    int i = 0,j = 1;
   
    for(i = strlen(numHex)-1; i >= 0;i--)
    {

        switch(numHex[i])
        {
            case '1': numDecimal += 1 * j;break;
            case '2':numDecimal += 2 * j; break;
            case '3':numDecimal += 3 * j; break;
            case '4':numDecimal += 4 * j; break;
            case '5':numDecimal += 5 * j; break;
            case '6':numDecimal += 6 * j; break;
            case '7':numDecimal += 7 * j; break;
            case '8':numDecimal += 8 * j; break;
            case '9':numDecimal += 9 * j; break;
            case 'A':numDecimal += 10 * j; break;
            case 'a':numDecimal += 10 * j; break;
            case 'B':numDecimal += 11 * j; break;
            case 'b':numDecimal += 11 * j; break;
            case 'C':numDecimal += 12 * j; break;
            case 'c':numDecimal += 12 * j; break;
            case 'D':numDecimal += 13 * j; break;
            case 'd':numDecimal += 13 * j; break;
            case 'E':numDecimal += 14 * j; break;
            case 'e':numDecimal += 14 * j; break;
            case 'F':numDecimal += 15 * j; break;
            case 'f':numDecimal += 15 * j; break;
            default:printf("input error!\n");return 1;
        }

        j *= 16;
    }

    printf("%s(16) turn to decimal number is %d(10)\n",numHex,numDecimal);

    

    return 0;
}

现写了一个。供你参考。写完一直觉得不是很好。大家多多提提意见!

南国利剑
2010-12-01 01:17
linyongxing
Rank: 2
等 级:论坛游民
帖 子:9
专家分:10
注 册:2010-11-29
收藏
得分:5 
回复 3楼 南国利剑
你的程序我已经经过调试后,发现有点问题,所以帮你改改!
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
    int numDecimal = 0;
    int i = 0,j = 1;
    char numHex[100];
    printf("input a hexadecimal number:\n");
   /* char numHex[100];  把定义的放在前面才不会出错  */
    gets(numHex);
  
  /*  int numDecimal = 0; 把定义的放在前面才不会出错 */
  /*  int i = 0,j = 1;   把定义的放在前面才不会出错  */
  
    for(i = strlen(numHex)-1; i >= 0;i--)
    {

        switch(numHex[i])
        {
            case '0': numDecimal += 0 * j;break;   /*你少了定义有‘0’情况了,所以帮你补上了*/
            case '1': numDecimal += 1 * j;break;
            case '2':numDecimal += 2 * j; break;
            case '3':numDecimal += 3 * j; break;
            case '4':numDecimal += 4 * j; break;
            case '5':numDecimal += 5 * j; break;
            case '6':numDecimal += 6 * j; break;
            case '7':numDecimal += 7 * j; break;
            case '8':numDecimal += 8 * j; break;
            case '9':numDecimal += 9 * j; break;
            case 'A':numDecimal += 10 * j; break;
            case 'a':numDecimal += 10 * j; break;
            case 'B':numDecimal += 11 * j; break;
            case 'b':numDecimal += 11 * j; break;
            case 'C':numDecimal += 12 * j; break;
            case 'c':numDecimal += 12 * j; break;
            case 'D':numDecimal += 13 * j; break;
            case 'd':numDecimal += 13 * j; break;
            case 'E':numDecimal += 14 * j; break;
            case 'e':numDecimal += 14 * j; break;
            case 'F':numDecimal += 15 * j; break;
            case 'f':numDecimal += 15 * j; break;
            default:printf("input error!\n");return 1;
        }

        j *= 16;
    }

    printf("%s(16) turn to decimal number is %d(10)\n",numHex,numDecimal);

    

    return 0;
}

2010-12-01 13:57
linyongxing
Rank: 2
等 级:论坛游民
帖 子:9
专家分:10
注 册:2010-11-29
收藏
得分:5 
回复 楼主 cdutzh101
下面的程序也是一个十六进制数转换成十进制数并输出的程序
这个程序不是我本人编写的  摘录《C语言程序设计实训与考试指导(第2版)》 高等教育出版社
这个程序我是看不大懂,还望高手注释一下,谢谢!
程序代码:
#include<stdio.h>
#include<string.h>
main()
{
    double turn(char x[]);
    char str[10];
    double a;
    gets(str);
    a=turn(str);
    printf("%.0f\n",a);
}
double turn(char x[])
{
    int i;
    double m=0;
    for(i=0;x[i]!='\0';i++)
        if(x[i]>='0'&&x[i]<='9')m=m*16+x[i]-'0';
        else if(x[i]>='A'&&x[i]<='F')m=m*16+x[i]-'A'+10;
        else if(x[i]>='a'&&x[i]<='f')m=m*16+x[i]-'a'+10;
    return m;
}

 

[ 本帖最后由 linyongxing 于 2010-12-1 14:31 编辑 ]
2010-12-01 14:30
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:5 
回复 楼主 cdutzh101
我用VS2003调试楼主的程序时。感觉是求幂函数返回的值有问题,然后我自己山寨了一个求幂函数,
这个程序在linux下能正常运行,但是在VS上还是运行失败,我跟的时候发现求幂函数返回的结果还是不对。
程序如下:
#define NUMBER 16
#include "stdio.h"
#include "string.h"
#include "math.h"
void main()
{
    int mi(int x);
    char a[17]={"0123456789ABCDEF"};
    char c[20];
    int b[16]={'0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'};
    int i=0,j=0;
    int m,n,t,num=0;
    gets(c);
        m=strlen(c);
        for(i=0;i<m;i++)
        {
            for(j=0;j<16;j++)
            {
                if(c[i]==a[j])
                {
                    n=m-i-1;
                    num+=j*mi(n);  /*调用我自己山寨的求幂函数*/
                 }
            }
        }
printf("输出转换后的十进制数:%d\n",num);
}

 

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

运行结果:
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-12-01 18:05
cdutzh101
Rank: 2
等 级:论坛游民
帖 子:43
专家分:64
注 册:2009-8-20
收藏
得分:0 
谢谢。大家给了我非常好的答案。感谢了。我发现问题了int b[16]={'0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'};
,不能这样初始化数组,应该是int b[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};这样结果就对了。
2010-12-01 18:20
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
收藏
得分:5 
void main()
{
    char *a = "0123456789ABCDEF";
    char c[200];
    int i, m, num=0;
    gets(c);
    m=strlen(c);
    for(i=0;i<m;i++)
    {
        char * pos = ::strchr(a, toupper(c[i]));
        if(pos==NULL)
            break;
        num *= 16;
        num += (pos-a);
    }
    printf("该十六进制的值为:%d",num);
}

[ 本帖最后由 makebest 于 2010-12-1 19:14 编辑 ]
2010-12-01 19:09
freedgun
Rank: 5Rank: 5
等 级:职业侠客
帖 子:147
专家分:302
注 册:2010-11-11
收藏
得分:0 
不错不错  我收藏下

有什么样的付出,就有什么样的收获!!
2010-12-01 19:33
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:0 
以下是引用cdutzh101在2010-12-1 18:20:27的发言:

谢谢。大家给了我非常好的答案。感谢了。我发现问题了int b[16]={'0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'};
,不能这样初始化数组,应该是int b[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};这样结果就对了。
为什么我的能做出来呢?我就是用你之前的那种初始化方式啊?
2010-12-01 20:50
快速回复:十六进制转十进制。问题在哪里呢?
数据加载中...
 
   



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

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