16进制字符串转换成2进制字节流

来源:互联网 发布:java工作经验的描述 编辑:程序博客网 时间:2024/05/29 04:48

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;

}

0 0
原创粉丝点击