如十六进制数组”0xf1, 0x1e, 0x4e ,0x58, 0x3a, 0x76“,转成字符串”F11E4E583A76“输出
附上部分示例代码:
uint8_t HexToAscii(uint8_t hex){
if(hex > 9){
return (hex+55); // 16进制 0A 对应的ascii 'A',两者相差55 -- 可以比照ascii表理解
}else{
return (hex+48); // 16进制 01 对应的ascii '1' 两者相差48 -- 可以比照ascii表理解
}
}
uint16_t HexArray_To_String(uint8_t*hexarray,uint8_t *strarray,uint16_t hex_len,uint8_t str_len)
{
uint8_t temp;
printf("hex_len = %d,str_len = %d\n",hex_len,str_len);
if(hex_len<=str_len)//防止溢出
{
for(int i=0;i<hex_len;i++)
{
temp = hexarray[i] & 0xf0; // 取16进制数高位放到 HexToAscii 函数中转成字符
*(strarray + i*2) = HexToAscii(temp >> 4);
temp = hexarray[i] & 0x0f; // 取16进制数低位放到 HexToAscii 函数中转成字符
*(strarray + i*2 + 1) = HexToAscii(temp);
}
}
else printf("len error\r\n");
return hex_len*2;
}
int main(int argc, char *argv[])
{
uint8_t hex_Data[6] = {0xF1,0x1E,0x4E,0x58,0x3A,0x76};
uint8_t str_data[32] = {0};
HexArray_To_String(hex_Data,str_data,sizeof(hex_Data),sizeof(str_data));
printf("string is %s.\n",str_data);
return 0;
}
调试结果: