C语言再将16进制的数组(数组的元素都为16进制)转换为字符数组时(例:arr【】={1,2,3}转化为arr【】={“1”,“2”,“3”}时),如何实现?并且如果要求字符数组的元素都是两位时(例:arr【】={1,2,3}转化为arr【】={“01”,“02”,“03”}时)又如何实现?
#include <stdio.h>
int main(void)
{
char buf[32] = {0};
sprintf(buf,"%02d",1);
printf("%s\n", buf);
return 0;
}
这样可以把1转成"01"
1转成'1'直接 用arr[0] +'0' 用本身加上字符0即可
#include<stdio.h>
#define N 5 //这里定义数组长度
unsigned char short2char( unsigned char num ) //数字转字符
{
unsigned char str;
if(num < 10)
{
str = num + '0' - 0x0;
}
else
{
str = num + 'a' - 0xa;
}
return str;
}
/*
int main()
{
char i, j, k = 0;
unsigned short arr[N] = { 1, 2, 3, 0xc};
unsigned char str[N] = {0};
printf("输入:");
for(k = 0; k < N; k++)
{
printf("%x ",arr[k]);
}
printf("\r\n");
for(k = 0; k < N; k++)
{
j = arr[k] % 0x10;
str[k] = short2char(arr[k]);
}
printf("输出:");
for(k = 0; k < N; k++)
printf("%c ",str[k]);
printf("\r\n");
}
*/
int main()
{
char i, j, k = 0;
unsigned short arr[N] = { 1, 2, 3, 0xc, 0x1c};
unsigned char str[N][2] = {0};
printf("输入:");
for(k = 0; k < N; k++)
{
printf("%x ",arr[k]);
}
printf("\r\n");
for(k = 0; k < N; k++)
{
i = ( arr[k] & 0xf0 ) >> 4;
j = arr[k] & 0x0f;
printf("%02X ",i);
printf("%02X\n",j);
str[k][0] = short2char(i);
str[k][1] = short2char(j);
}
printf("输出:");
for(k = 0; k < N; k++)
{
printf("%c",str[k][0]);
printf("%c ",str[k][1]);
}
printf("\r\n");
}
如上,被注释的是单字符的情况,下面的是双字符的情况
由于是上班摸鱼,就不写scanf之类的了,自己改去
作为一个C程序员,对
scanf,sscanf,fscanf
printf,sprintf,fprintf
这类函数的用法,还是要做到“拳不离手,曲不离口”的。