十六进制转字符

wzw12315 2012-05-23 01:57:03
在单片机里面定义了一个unsigned char buf[10];其内面放的数是16进制的,即buf[0]=0x11 ,bug[1]=0x22,buf[3]=0x33,....,buf[9]=0x88。 现在我要把这字符数组里的十六进制转换成字符输出到终端来,即:1122334455667788,这样的格式,不知道用C语言如何转换呢?
还有一点我不明白的是,因为buf是无符号字符数组,里面怎么存的是16进制而不错误呢?事实它是可以的,但是我不明白
...全文
154 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 4 楼 的回复:
unsigned char buf[2]={0x11,0x22};
char str[2*2+1];
int i;
for (i=0;i<2;i++) sprintf(str+i*2,"%02x",buf[i]);
printf("%s\n",str);//1122

在pc机上可以用,但是在单片机里面就用不了,我按照你的方法转换成字符后用串口输出,但串口……
[/Quote]
那只有靠自己调试了。
wzw12315 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
unsigned char buf[2]={0x11,0x22};
char str[2*2+1];
int i;
for (i=0;i<2;i++) sprintf(str+i*2,"%02x",buf[i]);
printf("%s\n",str);//1122
[/Quote]
在pc机上可以用,但是在单片机里面就用不了,我按照你的方法转换成字符后用串口输出,但串口没有输出
qq120848369 2012-05-23
  • 打赏
  • 举报
回复
字节就是字节,16进制是人类的看法而已。
赵4老师 2012-05-23
  • 打赏
  • 举报
回复
unsigned char buf[2]={0x11,0x22};
char str[2*2+1];
int i;
for (i=0;i<2;i++) sprintf(str+i*2,"%02x",buf[i]);
printf("%s\n",str);//1122
justkk 2012-05-23
  • 打赏
  • 举报
回复
buf 的本质就是一块内存地址而已,存的就是一个字节流,只是看你按照什么来解读
justkk 2012-05-23
  • 打赏
  • 举报
回复
#include <stdio.h>

void hex(char *t, char *s, int l)
{
int i;
unsigned char c;

for( i = 0; i < l; i++ )
{
c = (s[i] >> 4) & 0x0F;
t[2*i] = (c <= 0x9) ? c + 0x30 : c + 0x37;

c = s[i] & 0x0F;
t[2*i + 1] = (c <= 0x9) ? c + 0x30 : c + 0x37;
}
t[2*i] = 0;
}

main()
{
unsigned char s[] = {0x11, 0x22, 0x33};
char t[64];

hex(t, s, 3);
printf("t=[%s]\n", t);
}
turing-complete 2012-05-23
  • 打赏
  • 举报
回复
计算机中只有二进制的0和1,其他的都是假象,用来给人看的。

正所谓,数据都有“里”和“表”之分。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧