加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

字符串“123456789ABCDEF” 转换16进制的最佳答案!

(2007-11-26 18:33:06)
标签:

c语言

答案

分类: 我的作品

字符串*prt=“123456789ABCDEF”变成0x12这样的十六进制,存在unsigned char buffer[8]中,用c语言编。   比如 12变成 0x12 ,那34就变成0x34了,以此类推。
 
   这题很恶心,起初我都没看明白怎么回事,我自己编的那个程序更恶,大意就是你不要 buffer里面是十六进制么?我来, 当ptr[0]=='1'的时候,我就给buffer[0]赋一个0x12,当prt[2]=='3'的时候,我给buffer[2]赋值十六进制0x34,以此类推,估计不会给分。
   网上很多人做了答案,但是没总结,我试着运行了几个都不好使,但是还是找到了一个最简洁,而且容易懂的程序,给大家分享,感谢原作者,名忘了。
  我自己加的注释,和最后那条输出语句。 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char  *ptr="1234567890ABCDEF";
    char  lin[3];  //临时用来装字符的数组,
    unsigned char buffer[8];
    int i;
    for(i=0;i<8;++i)
    {
        lin[0]=ptr[i*2];
        lin[1]=ptr[i*2+1];//这两条我也不解释了,一看就明白
        lin[2]='\0';
        sscanf(lin,"%x",&buffer[i]);//这条语句是整个程序的核心,sscanf和sprintf很类似,不明白看书去。
    }
    for(i=0;i<8;++i)
        printf("%#x  ",buffer[i]);//以十六进制输出,格式为0xff ff为任意数
    getch();
    return(0);
}
  最后的输出为 0x12 0x34 0x 56 ……  达到了程序要的要求,注释写的比较恶心,因为不写注释谁都能看懂,除了我那种判断方法,别的解法都很难读懂而且程序相当长,有的甚至用到了共用体!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有