| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 448 人关注过本帖
标题:一个小函数,求优化
只看楼主 加入收藏
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
结帖率:97.3%
收藏
已结贴  问题点数:5 回复次数:5 
一个小函数,求优化
程序代码:
void hex_n (char *hex)     //传入一个十六进制数,将其转换成二进制,我的方法太笨了吧,有没有简单点的。。。

{
//    char  hex_bin_table[][4] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};

    int len_hex = strlen(hex);
//    int flag = 0;

    while (len_hex)
        {
            switch (*hex)

                {
                    case '0':
                        printf ("0000 ");
                        break;
                    case '1':
                        printf ("0001 ");
                        break;
                    case '2':
                        printf ("0010 ");
                        break;
                    case '3':
                        printf ("0011 ");
                        break;
                    case '4':
                        printf ("0100 ");
                        break;
                    case '5':
                        printf ("0101 ");
                        break;
                    case '6':
                        printf ("0110 ");
                        break;
                    case '7':
                        printf ("0111 ");
                        break;
                    case '8':
                        printf ("1000 ");
                        break;
                    case '9':
                        printf ("1001 ");
                        break;
                    case 'a':
                    case 'A':
                        printf ("1010 ");
                        break;
                    case 'b':
                    case 'B':
                        printf ("1011 ");
                        break;
                    case 'c':
                    case 'C':
                        printf ("1100 ");
                        break;
                    case 'd':
                    case 'D':
                        printf ("1101 ");
                        break;
                    case 'e':
                    case 'E':
                        printf ("1110 ");
                        break;
                    case 'f':
                    case 'F':
                        printf ("1111 ");
                        break;
                    default:
                        break;
                }

            len_hex--;
            hex++;

        }

}
搜索更多相关主题的帖子: 优化 
2012-09-13 22:05
w995612220
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:139
专家分:313
注 册:2012-6-20
收藏
得分:1 
void hex_n (char *hex)     //传入一个十六进制数,将其转换成二进制,我的方法太笨了吧,有没有简单点的。。。

{
    int i,j;
    char  a[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char  b[][5]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};

    int len_hex = strlen(hex);

    for(i=0;i<len_hex;i++)
    {
        for(j=0;j<16;j++)
            if(a[j]==*hex) break;

            printf("%s",b[j]);

            hex++;
            printf("\n");
    }
}
//这个也不是很好,毕竟不是很好用的代码..
2012-09-13 22:46
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:1 
#include<stdio.h>


void to_binary(int n)  
{
    int r;
    r = n % 2;
    if (n >= 2)
        to_binary(n / 2);
    putchar('0' + r);
    return;
}

int main()
{   
    int x;
    char c;
     scanf("%c", &c);
    if(c >= 'a' && c <= 'f')
    {
        x = c - 'a' + 10;
        to_binary(x);
    }
    else if(c >= 'A' && c <= 'F')
    {
        x = c - 'A' + 10;
        to_binary(x);
    }
    else
    {
         x = c - '0';
         to_binary(x);
    }
    return 0;
}

仅供参考
2012-09-13 23:16
cplusplus_gc
Rank: 2
等 级:论坛游民
帖 子:7
专家分:12
注 册:2012-9-8
收藏
得分:1 
只需要输出内存模型就够了。不用做这些装换。
2012-09-13 23:58
Andony
Rank: 2
等 级:论坛游民
帖 子:38
专家分:60
注 册:2012-9-12
收藏
得分:1 
这方法也还可以了,思路也挺巧妙的,受教了

可以这样做先把 十六进制 的数转化为 十进制 的数,再把 十进制 的数转化为 二进制 的数
这样看的话比你那个更麻烦,

  1 #include <stdio.h>
  2
  3 #define MAX 100
  4 int my_pow(int x,int y) //求 x^y
  5 {
  6         int ret = 1;
  7         int i;
  8         if(0 == y){
  9                 return ret;
 10         }else{
 11                 for(i = 1;i <= y;i++){
 12                         ret *= x;
 13                 }
 14         }
 15
 16         return ret;
 17 }
 18 int ox_to_ten(int N)//把16进制数转化为10进制数
 19 {
 20         int i,ret = 0;
 21         for(i = 0;N > 0;i++){
 22                 ret += (N%10)*( my_pow(16,i) );
 23                 N = N/10;
 24         }
 25         return ret;
 26 }
 27 void ox_to_two(int N)//把16进制数转化为2进制数
 28 {      
 29         int tmp[MAX];
 30         int i,j,k;
 31         k = ox_to_ten(N);//先把传进来的16进制数转化为10进制数
 32         for(i = 0;k > 0;i++){
 33                 tmp[i] = k%2;
 34                 k = k/2;
 35         }
 36         tmp[i] = '\0';
 37         for( ;i > 0;i--){
 38                 printf("%d",tmp[i - 1]);
 39         }
 40         printf("\n");
 41 }
 42
 43 int main(void)
 44 {
 45         int N = 11;
 46         ox_to_two(N);
 47         return 0;
 48 }

重复的事情用心做,你就是赢家
2012-09-14 13:43
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
其实楼主的思路也不笨,代码也还好。并不是说越短的代码就是越好的。不过其它人的方法楼主也应该学学。
2012-09-14 20:30
快速回复:一个小函数,求优化
数据加载中...
 
   



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

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