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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序,怎么把16进制转成字符:相关的知识,希望对你有一定的参考价值。

文件输入:每个字符写成 \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的哈~~)
参考技术A 你的意思我还是不太懂 但是可以试试格式输出字符里的 m n 什么的 我也是刚学这个

C语言:怎么将十六进制字符串转换成二进制字符串,谁帮我写个函数

参考技术A 十六进制转成十进制的函数:
//返回16进制字符串s对应的整数值,遇到任何一个非法字符都返回-1。
int HexToDec(char *s)

char *p = s;

//空串返回0。
if(*p == '\0')
return 0;

//忽略开头的'0'字符
while(*p == '0')
p++;

int dec = 0;
char c;

//循环直到字符串结束。
while(c = *p++)

//dec乘16
dec <<= 4;

//数字字符。
if(c >= '0' && c <= '9')

dec += c - '0';
continue;


//小写abcdef。
if(c >= 'a' && c <= 'f')

dec += c - 'a' + 10;
continue;


//大写ABCDEF。
if(c >= 'A' && c <= 'F')

dec += c - 'A' + 10;
continue;


//没有从任何一个if语句中结束,说明遇到了非法字符。
return -1;


//正常结束循环,返回10进制整数值。
return dec;

十进制转成二进制的函数:
/*递归法求二进制数*/

#include<stdio.h>

void printb(int x,int n);

void main()

int x;
printf("input number:");
scanf("%d",&x);
printf("number of decimal form: %d\n",x);

printb(x,sizeof(int)*8);
putchar('\n');


void printb(int x,int n)

if(n>0)

putchar('0'+( (unsigned)(x & (1<<(n-1) ) )>>(n-1)));
printb(x,n-1);

追问

我现在要得到二进制的字符串啊,不是输出来

追答

#include
void main()

char c[16];
int a[16][4]=0;
int i=0,j;
scanf("%s",c);---->>以字符串形式输入
while(c[i])--------->>>把字符串的每一位还原为数字

if(c[i]>'0'&&c[i]='A'&&c[i]='a'&&c[i]=0;j--)

a[i][j]=c[i]%2;
c[i]/=2;

for(j=0;j<4;j++)
printf("%d",a[i][j]);
i++;

本回答被提问者采纳

以上是关于C语言程序,怎么把16进制转成字符:的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何把11位16进制字符串转成16进制数?

C语言如何把11位16进制字符串转成16进制数?

C里面怎么把字符串转成数字

C语言,字符串转成16进制或者二进制写入二进制文件

c语言如何将数组转成字符串

在C语言中怎么把一个数转换成二进制然后输出