/**************************************************
*函数名称 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;
}