C语言程序,怎么把16进制转成字符:

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:41:36
文件输入:每个字符写成 \x41 的形式,这里\x41代表ASCII字符A
要求输出:一一对应地转换成熟悉的ASCII字符

注意:假设输入文件是可以按行读取的,即每行对应一个字符串:
\x43\x55\x76\xE3\x34.....
这个程序该怎么写呢?关键就是怎么处理这个\x。。。感觉很讨厌,而且因为每行长度不定所以不可以用scanf来限定输入的格式。
我个人感觉要么就是先把每行都按字符读进来,然后对每个数字进行转换,因为16进制都只有两位,那么\x后面的数字都乘以16,\x之前的数字都乘以1,然后加起来。
不知道大家有没有更好的方法:)
这个程序的目的是把一个字符串(当然,一个文件里有很多行,每行对应一个字符串,且长度不定)从16进制格式转换成字符格式~
比如:字符串 \x61\x62\x63\x64...
进过程序处理后转换成 abcd...

我想你的问题只是将数字转换为字符对吧,那么我就不帮你做全文多行的源码了,我做了一行转换的,你可以再在外层嵌套一个循环,并使用二维数组来实现全文多行的ASCII码转换:
#include "Stdio.h"
#include "Conio.h"

int main(void)
{
int num[10],i=0;

while(getchar() != '\n')
{
getchar();
scanf("%x",&num[i]);
printf("%c",num[i]);
i++;
}
getch();
return 0;
}
原理是这样的:
你每次的四个字节的格式都是\xyy的形式,我只要读入那个十六进制数就可以了,用scanf("%x",&num[i]);语句就可以读入十六进制数字,将一行的十六进制数在循环中全部取出存放在一维数组中。
在输出方面我投了个懒,直接读入就输出了,不过这个不是关键了,关键是以printf("%c",num[i]);语句输出,编译器就会自行把十六进制数转换为ascii码所对应的字符并输出。
现在你明白了么,就是以格式化的输入输出实现读入的是十六进制数,输出的是字符。(那两个getchar()是分别读入字符\和x的哈~~)

你的意思我还是不太懂 但是可以试试格式输出字符里的 m n 什么的 我也是刚学这个