字符串*prt=“123456789ABCDEF”变成0x12这样的十六进制,存在unsigned
char buffer[8]中,用c语言编。
比如 12变成 0x12 ,那34就变成0x34了,以此类推。
这题很恶心,起初我都没看明白怎么回事,我自己编的那个程序更恶,大意就是你不要
buffer里面是十六进制么?我来,
当ptr[0]=='1'的时候,我就给buffer[0]赋一个0x12,当prt[2]=='3'的时候,我给buffer[2]赋值十六进制0x34,以此类推,估计不会给分。
网上很多人做了答案,但是没总结,我试着运行了几个都不好使,但是还是找到了一个最简洁,而且容易懂的程序,给大家分享,感谢原作者,名忘了。
我自己加的注释,和最后那条输出语句。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *ptr="1234567890ABCDEF";
char lin[3];
//临时用来装字符的数组,
unsigned
char buffer[8];
int i;
for(i=0;i<8;++i)
{
lin[0]=ptr[i*2];
lin[1]=ptr[i*2+1];//这两条我也不解释了,一看就明白
lin[2]='\0';
sscanf(lin,"%x",&buffer[i]);//这条语句是整个程序的核心,sscanf和sprintf很类似,不明白看书去。
}
for(i=0;i<8;++i)
printf("%#x
",buffer[i]);//以十六进制输出,格式为0xff ff为任意数
getch();
return(0);
}
最后的输出为 0x12 0x34 0x 56
……
达到了程序要的要求,注释写的比较恶心,因为不写注释谁都能看懂,除了我那种判断方法,别的解法都很难读懂而且程序相当长,有的甚至用到了共用体!
加载中,请稍候......