例如,我们收到16进制数(0)的一包数据xA1,0xB1,0xC1,0xD1)结果是:将16进制数据转换为字符串A1B1C1D1.用途:写日志或其他特殊用法。使用方便%s打印出来查看
#define u8 unsigned char #define u32 unsigned int int main() {
unsigned char SN[6] = {
0x00,0x00,0x00,0x00,0x57,0xe4 }; unsigned char sn[6]; hex_to_asciistring(SN, 6, sn); printf("SN=%s\n,",sn);///输出结果为000000057e4” } //参数1为原始数据,参数2为数组长度,参数3为转出的字符串 void hex_to_asciistring(u8* str,u32 size,u8* str1) {
u8 deposit [2]; int i=0; u8 j = 0; for(i=0;i<size;i ) {
deposit[1] = str[i] & 0x0F; deposit[0] = (str[i] &0xF0) >> 4; for(j = 0; j < 2; j++) {
switch(deposit[j]) {
case 0x00: str1[i*2+j]='0'; break; case 0x01: str1[i*2+j]='1'; break; case 0x02: str1[i*2+j]='2'; break; case 0x03: str1[i*2+j]='3'; break; case 0x04: str1[i*2+j]='4'; break; case 0x05: str1[i*2+j]='5'; break; case 0x06: str1[i*2+j]='6'; break; case 0x07: str1[i*2+j]='7'; break; case 0x08: str1[i*2+j]='8'; break; case 0x09: str1[i*2+j]='9'; break; case 0x0A: str1[i*2+j]='A'; break; case 0x0B: str1[i*2+j]='B'; break; case 0x0C: str1[i*2+j]='C'; break; case 0x0D: str1[i*2+j]='D'; break; case 0x0E: str1[i*2+j]='E'; break; case 0x0F: str1[i*2+j]='F'; break; default: return ; } } } return ; }