近期工作中要求将工程中的数据在ASCII码与十六进制间转换(数据库数据输入输出格式转换),所以需要手动编写一个数据格式转换的接口函数。
十六进制转ASCII本质是为了写进数据库时16位数据变为32位,每个字节扩充为两个字节,反之两位并为一位即ASCII转回十六进制。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//ASCII转十六进制,参数为:
//unsigned char chAscH 高位字节,即ASC【2*i】
//unsigned char chAscL 低位字节,即ASC【2*i+1】
//返回值return HEX【i】
unsigned char AscToHex(unsigned char chAscH, unsigned char chAscL)
{
if(chAscH>='0' && chAscH<='9')
chAscH -= 48;
else if(chAscH>='a' && chAscH<='f')
chAscH -= 87;
else if(chAscH>='A' && chAscH<='F')
chAscH -= 55;
if(chAscL>='0' && chAscL<='9')
chAscL -= 48;
else if(chAscL>='a' && chAscL<='f')
chAscL -= 87;
else if(chAscL>='A' && chAscL<='F')
chAscL -= 55;
return chAscH << 4 | chAscL;
}
//同上,HEX【i】一位拆成两位ASC【2*i】,ASC【2*i+1】
void HexToAsc(unsigned char chHex, unsigned char *chAscH, unsigned char *chAscL)
{
unsigned char chTemp;
chTemp = chHex>>4;
if(chTemp>=0 && chTemp<=9)
chTemp += 48;
else if(chTemp>=0x0a && chTemp<=0x0f)
chTemp += 55;
*chAscH = chTemp;
chTemp = chHex & 0x0f;
if(chTemp>=0 && chTemp<=9)
chTemp += 48;
else if(chTemp>=0x0a && chTemp<=0x0f)
chTemp += 55;
*chAscL = chTemp;
}