| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7951 人关注过本帖
标题:关于十六进制转换为字符串的问题
只看楼主 加入收藏
szweifj
Rank: 2
等 级:论坛游民
帖 子:30
专家分:26
注 册:2010-2-10
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
关于十六进制转换为字符串的问题
如题,笔者需要将数组中的十六进制转换为字符串,用于统计和输出,现写了如下代码,
现在的问题是 转换不成功,输出的并不是笔者想要的,请教各位高人,小弟需要在程序中作那些改动? 谢谢!
#include<stdio.h>
void main()
{
    char temp[4]={0x00,0x12,0x31,0x44};
    char tempbuf[4]={0};
    int  x,y=0;
    for(x=0;x<4;x++)
    {
        tempbuf[y]=temp[x];
        tempbuf[y]=(tempbuf[y]>>2)+'0';
        tempbuf[y+1]=(temp[x]&0x0f)+'0';
        y=y+2;
    }
    printf("%0x\n",temp);
    printf("%s\n",tempbuf);
}
其中,源数组是temp  目标数组是 tempbuf,要求tempbuf 输出为字符串。
要求使用底层代码编写,不能用除 stdio.h 以外的头文件,非作业,仅是有些疑问






[ 本帖最后由 szweifj 于 2011-2-19 18:13 编辑 ]
搜索更多相关主题的帖子: 十六进制 字符串 统计 
2011-02-19 18:11
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
给出实际例子

小代码,大智慧
2011-02-19 18:34
szweifj
Rank: 2
等 级:论坛游民
帖 子:30
专家分:26
注 册:2010-2-10
收藏
得分:0 
要求把数组char temp[4]={0x00,0x12,0x31,0x44};中的元素转换为字符串的形式: 00 12 31 44 ,并保存到 tempbuf 中进行输出
2011-02-19 19:22
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:20 
楼主考虑问题很不周全啊。
试问:如果有十六进制数:0xA3
如何转换二进制1011呢?应该得到字符'A'啊。
仅就楼主的问题讨论如下:
h = (unsigned char)0x12 >> 4; //要考虑到以符号位补位的情况
如上可以得到一个字节中高4位的数值;
l = 0x12 & 0x0F;
如上可以得到一个字节中低4位的数值;
无论h和l,设为t
if(t < 10)
    s = t + '0';
else
    s = t - 10 + 'A';
这样得到的是一个个与十六进制数对应的字符,但还没有构成字符串,要以0作为字符串的结尾啊。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-19 19:30
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
类似于BCD码操作

小代码,大智慧
2011-02-19 19:36
szweifj
Rank: 2
等 级:论坛游民
帖 子:30
专家分:26
注 册:2010-2-10
收藏
得分:0 
受教啦  
在定义 char tempbuf[4];时 是否可以改为 char tempbuf[10]; 然后 memset(tempbuf,0,sizeof(tempbuf));对数组初始化,这样就可以不要考虑结尾和越界的问题啦
2011-02-19 19:37
szweifj
Rank: 2
等 级:论坛游民
帖 子:30
专家分:26
注 册:2010-2-10
收藏
得分:0 
我遇到的问题是要把BCD码转换为 字符串格式  呵呵
主要是知道我的程序问题出在什么地方,二是有没有其它方法可以进行 十六进制到 字符 的转换

[ 本帖最后由 szweifj 于 2011-2-19 19:43 编辑 ]
2011-02-19 19:37
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
以下是引用szweifj在2011-2-19 19:37:04的发言:

受教啦  
在定义 char tempbuf[4];时 是否可以改为 char tempbuf[10]; 然后 memset(tempbuf,0,sizeof(tempbuf));对数组初始化,这样就可以不要考虑结尾和越界的问题啦
没必要的啦!
char tempbuf[5] = {0};
多简洁。
另外,要多说一点:如果能用系统函数(库函数)还是用库函数吧,毕竟那是经过千锤百炼的啊!
应该是itoa()函数吧,再利用strcat(),就可以把很多十六进制数转换成的字符串连接到一起了。
再有就是,如果你只是想看到十六进制方式的输出,可以用:
printf("%04X", (unsigned)任意整形变量);
还有,你的“十六进制数”其实不是真正的十六进制数啊,就算是要处理十六进制数,也没有必要用字符处串的方式,那么直白地表示啊。因为,任何我们在程序中表达的数值,其实在内存就是二进制形式,而程序中的表达方法可就多了。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-19 19:43
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
这么说就知道了。
不过,tempbuf数组的长度应该要乘以2,再+1吧,毕竟要把4位二进制转换成8位二进制的ASCII码啊。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-19 19:45
快速回复:关于十六进制转换为字符串的问题
数据加载中...
 
   



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

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