如何将ASCII码转换为十六制?

avonation 2008-12-15 09:48:37
请教各位老大:

C中,如何将ASCII码转换为十六进制?


输入31,输出01;
输入32,输出02;
输入65,输出0A;
输入66,输出0B;

肯请大虾指点江山!不胜感激
for(i=0;i<4;i++) //输入ec29(ASCII码),输出0x0e,0x0c,0x02,0x09
{
if((byte[i]>=65)&&(byte[i]<=70)) //A-F
byte[i] = byte[i]-55;
else if((byte[i]>=97)&&(byte[i]<=102))//a-f
byte[i] = byte[i]-87;
else if((byte[i]>=48)&&(byte[i]<=57))//0-9
byte[i] = byte[i]-30;
else
cotinue;/如果是十六进制数则继续循环,也可不要此句.
}




...全文
790 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
avonation 2008-12-18
  • 打赏
  • 举报
回复


if (*s >= '0' && *s <= '9')
i = *s - '0';
else if (*s >= 'a' && *s <= 'f')
i = *s - 'a' + 0xa;
else if (*s >= 'A' && *s <= 'F')
i = *s - 'A' + 0xa;
else
return 0;
wyswyg63 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 avonation 的回复:]
本人在工作当中,碰到这样的一个问题,

输入ec29四个数字,在输出之前调用了一个函数,但是该函数的作用是转换为ASCII码,并以十进制输出,

这并非是偶想得到的数据,偶想得到的是十六进制的0x0e,0x0c,0x02,0x09,而不是0x65,0x63,0x32,0x39
[/Quote]
那你前面写的就可以啊,
char byte[4];
int date[4];
for(i=0;i <4;i++) //输入ec29(ASCII码),输出0x0e,0x0c,0x02,0x09
{
scanf("%c", &byte[i]); //按字符读进去
if((byte[i]>=65)&&(byte[i] <=70)) //A-F
date[i] = byte[i]-55;
else if((byte[i]>=97)&&(byte[i] <=102))//a-f
date[i] = byte[i]-87;
else if((byte[i]>=48)&&(byte[i] <=57))//0-9
date[i] = byte[i]-48; //这里应该-48
else
cotinue;/如果是十六进制数则继续循环,也可不要此句.
}
for(i=0;i <4;i++)
printf("date[%d]=%x\n", i, date[i]); //换成%d就10进制输出。

星光伴月 2008-12-17
  • 打赏
  • 举报
回复
char c;
int i;
for(i=0;i<4;i++)
{
scanf("%c",&c);
if(c>='A' && c<='F') c-=('A'+10);
if(c>='a' && c<='a') c-=('a'+10);
if(c>='0' && c<='9') c-='0';
printf("%2x,",c);
}
iunion 2008-12-16
  • 打赏
  • 举报
回复
楼主概念不清

你的源码:输入4位字符串,每位在转成数字存储!!

不用这么麻烦


for(i=0; i<4; i++) //输入ec29(ASCII码),输出0x0e,0x0c,0x02,0x09
{
char[4] str;
if((byte[i]>=65)&&(byte[i] <=70)) //A-F
if((byte[i]>=97)&&(byte[i] <=102))//a-f
if((byte[i]>=48)&&(byte[i] <=57))//0-9
{
str[0] = 30;
str[1] = 'X';
str[2] = 30;
str[3] = byte[i];
}
else
continue;//如果是十六进制数则继续循环,也可不要此句.
}
  • 打赏
  • 举报
回复
有答案了已经,hoho
mifeixq 2008-12-16
  • 打赏
  • 举报
回复
这个对应输出不应该是char么……
avonation 2008-12-16
  • 打赏
  • 举报
回复
本人在工作当中,碰到这样的一个问题,

输入ec29四个数字,在输出之前调用了一个函数,但是该函数的作用是转换为ASCII码,并以十进制输出,

这并非是偶想得到的数据,偶想得到的是十六进制的0x0e,0x0c,0x02,0x09,而不是0x65,0x63,0x32,0x39
arong1234 2008-12-15
  • 打赏
  • 举报
回复
你这种规则本身就是错误的,
从你给的例子看,输入是ASCII码,
0x31对应字符'1',怎么出来个01?那个0那里来的?如果多位16进制数怎么表示?


[Quote=引用楼主 avonation 的帖子:]
请教各位老大:

C中,如何将ASCII码转换为十六进制?


输入31,输出01;
输入32,输出02;
输入65,输出0A;
输入66,输出0B;

肯请大虾指点江山!不胜感激
for(i=0;i <4;i++) //输入ec29(ASCII码),输出0x0e,0x0c,0x02,0x09
{
if((byte[i]>=65)&&(byte[i] <=70)) //A-F
byte[i] = byte[i]-55;
else if((byte[i]>=97)&&(byte[i] <=102))//a-f
byte[i] = byte[i]-87;
else if((byte[i]…
[/Quote]
chenfanshun 2008-12-15
  • 打赏
  • 举报
回复
输入ec29(ASCII码)怎么可能输出0x0e,0x0c,0x02,0x09 呢?
dxq120 2008-12-15
  • 打赏
  • 举报
回复
输入31,输出01;
输入32,输出02;
输入65,输出0A;
输入66,输出0B;
这里的输入是ASCII码十进制值,输出是ASCII码,但是我还是不会做
alexhilton 2008-12-15
  • 打赏
  • 举报
回复
31(10) = 01(16) ??
wyswyg63 2008-12-15
  • 打赏
  • 举报
回复
晕了,
输入31,输出01;
输入32,输出02;
输入65,输出0A;
输入66,输出0B;

//输入ec29(ASCII码),输出0x0e,0x0c,0x02,0x09

这2处怎么对应啊!

lz意思是按16进制输入一个值,然后找到该号码对应的ASCII码对应字符,如果是满足0-f,那么输出它。

还有转换为十六进制?是什么意思,
wyswyg63 2008-12-15
  • 打赏
  • 举报
回复
char c;
scanf("%c\n", &c);
int a;
a=(int)(c-'0');
printf("a=%x\n", a);

随便写的,试试看。

69,369

社区成员

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

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