16进制数组转化为字符数组的问题

问题遇到的现象和发生背景

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之类的了,自己改去

img

img

作为一个C程序员,对
scanf,sscanf,fscanf
printf,sprintf,fprintf
这类函数的用法,还是要做到“拳不离手,曲不离口”的。