hex2str str2hex互转

这篇博客介绍了如何在C语言中实现从十六进制字符串到二进制字符串以及从二进制字符串到十六进制字符串的转换。提供了HEX2BIN、HEX2BYTE、BYTE2HEX以及BIN2HEX四个关键函数的详细实现,这些函数用于处理十六进制字符到数值、数值到十六进制字符的转换,并确保转换的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**************************************************
  *函数名称 HEX2BIN
  *功能描述 十六进制串转BIN串
  *返回值    转换后整数值
  *************************************************/
uint8 HEX2BIN(uint8 * p_hexstr, uint8 * p_binstr)
{
    uint bin_len = 0;
    uint hex_len = strlen((char *)p_hexstr);
    uint index = 0;

    if (hex_len % 2 == 1)
    {
        hex_len -= 1;
    }

    bin_len = hex_len / 2;

    for(index = 0; index < hex_len; index+=2)
    {
        p_binstr[index/2] = ((HEX2BYTE(p_hexstr[index]) << 4) & 0xF0) + HEX2BYTE(p_hexstr[index + 1]);
    }

    return bin_len;
}

/**************************************************
  *函数名称 HEX2BYTE
  *功能描述 单个十六进制字符转其对应的数值
  *返回值    转换后整数值
  *************************************************/
uint HEX2BYTE(uint8 hex_ch)
{
    if (hex_ch >= '0' && hex_ch <= '9')
    {
        return hex_ch - '0';
    }

    if (hex_ch >= 'a' && hex_ch <= 'f')
    {
        return hex_ch - 'a' + 10;
    }

    if (hex_ch >= 'A' && hex_ch <= 'F')
    {
        return hex_ch - 'A' + 10;
    }

    return 0x00;
}

 

 




#ifndef MIN
#define MIN(a,b)            (((a) < (b)) ? (a) : (b))
#endif

#ifndef MAX
#define MAX(a,b)            (((a) < (b)) ? (b) : (a))
#endif


#define BETWEEN(VAL, vmin, vmax) ((VAL) >= (vmin) && (VAL) <= (vmax))
#define ISHEXCHAR(VAL) (BETWEEN(VAL, '0', '9') || BETWEEN(VAL, 'A', 'F') || BETWEEN(VAL, 'a', 'f'))



/**************************************************
  *函数名称 BYTE2HEX
  *功能描述 将0X0-0xF的整数转换为对应的十六进制字符
  *返回值    转换后的十六进制字符
  *************************************************/
char BYTE2HEX(uint8 int_val)
{
    if (BETWEEN(int_val, 0, 9))
    {
        return int_val + 0x30;
    }

    if (BETWEEN(int_val, 0xA, 0xF))
    {
        return (int_val - 0xA) + 'A';
    }

    return '0';
}



/**************************************************
  *函数名称 BIN2HEX
  *功能描述 转BIN串串十六进制
  *返回值    转换后HEX长度
  *************************************************/
uint BIN2HEX(uint8 * p_binstr, uint bin_len, uint8 * p_hexstr)
{
    uint32 index   = 0;
    uint32 hex_len = bin_len * 2;

    for (index = 0; index < bin_len; index++)
    {
        p_hexstr[index * 2] = BYTE2HEX((p_binstr[index] >> 4) & 0x0F);
        p_hexstr[(index * 2) + 1] = BYTE2HEX(p_binstr[index] & 0x0F);
    }
   
    return hex_len;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值