今天碰到一个需求:将16进制的数组转成对应的字符串显示出来,举例:
16进制数组:Hex[4] = {0xc1,0x12,0xe4,0x58};
显示为: “c1 12 e4 58”
一开始使用sprintf没有转出来,后来百度了一下,使用位运算可以做出来,原文章链接点击此处
Ascii表链接:ASCII表
整理了一下代码如下:
#include#include typedef unsigned char UChar; UChar HexToAscii(UChar c){ if(c > 9){ return (c+55); // 16进制 0A 对应的ascii 'A',两者相差55 -- 可以比照ascii表理解 }else{ return (c+48); // 16进制 01 对应的ascii '1' 两者相差48 -- 可以比照ascii表理解 } } UChar hexData[6] = {0xc1,0x12,0xe4,0x58,0xba,0x76}; int main(){ UChar temp; UChar data[32] = {0}; for(int i = 0; i < sizeof(hexData); i++){ temp = hexData[i] & 0xf0; // 取16进制数高位放到 HexToAscii 函数中转成字符 *(data + i*3) = HexToAscii(temp >> 4); temp = hexData[i] & 0x0f; // 取16进制数低位放到 HexToAscii 函数中转成字符 *(data + i*3 + 1) = HexToAscii(temp); *(data + i*3 + 2) = ' '; // 添加空格进行区分 } printf("string is %s.n",data); return 0; }
打印如下:
string is C1 12 E4 58 BA 76 .
具体不再展开解释,看代码注释就能明白。



