C语言字符串和16进制相互转换

/**
 * @brief ACSII change to hexadecimal
 * 
 * @param src The string is big end mode; less than 8 bits, and 0 is automatically added at the end
 * @param dest hexadecimal
 * @param size size
 */
void str2hex(char *src, uint8_t *dest, uint32_t size)
{
    uint8_t i = 0, j = 0, data = 0;
    memset(dest, 0, size);
    for (i = 0; i < size; i++)
    {
        for (j = 0; j < 2; j++)
        {
            if ((src[2 * i + j] >= '0') && (src[2 * i + j] <= '9'))
            {
                data |= (src[2 * i + j] - '0') << 4 * (1 - j);
            }
            else if ((src[2 * i + j] >= 'A') && (src[2 * i + j] <= 'F')) // Capital
            {
                data |= (src[2 * i + j] - ('A' - 0x0a)) << 4 * (1 - j);
            }
            else if ((src[2 * i + j] >= 'a') && (src[2 * i + j] <= 'f')) // littlecase
            {
                data |= (src[2 * i + j] - ('a' - 0x0a)) << 4 * (1 - j);
            }
        }
        dest[i] = data;
        data = 0x00;
    }
}

/**
 * @brief hexadecimal change to ACSII
 * 
 * @param src hexadecimal
 * @param dest ACSII
 * @param size hexadecimal size
 */
void hex2str(uint8_t *src, char *dest, uint32_t size)
{
    uint8_t i = 0, j = 0, data = 0;
    for (i = 0; i < size; i++)
    {
        for (j = 0; j < 2; j++)
        {
            data = (src[i] >> (4 * (1 - j))) & 0x0F;
            if (data <= 0x09) //((data >= 0x00) && (data <= 0x09)) //
            {
                dest[2 * i + j] = data + '0';
            }
            else if ((data >= 0x0A) && (data <= 0x0F)) // Capital
            {
                dest[2 * i + j] = data + 'A' - 0x0a;
            }
        }
    }   
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值