u_char *
hex_to_bin(u_char *dst, u_char *src,size_t len)
{
//16进制字符串的长度一定是偶数,因为一个字节的高低4位被分别转换成了一个16进制字符
//也就是一个2进制字节数据一定对应两个16进制字符,一个字符一个字节,因此是偶数倍
if(len & 0x01)
{
return (u_char *)NULL;
}
u_char t;
while(len)
{
t = *src++;
if(t < '0' || t >'9')
{
t = (t >='A' && t <='F') ? (t |0x20) : t;
if(t >= 'a' && t <='f')
{
t = t - 'a' + 10;//需要将字符转换成数值
}
else
{
return (u_char *)NULL;
}
}
else
{
t = t - '0';
}
//从0位开始计算,奇数位为字节低位,偶数位为字节高位
if(len-- & 0x01)
{
*dst |= (t & 0x0f);
dst++;
}
else
{
*dst = (t & 0x0f) << 4;
}
}
return dst;
}