原文站点:https://senitco.github.io/2017/06/07/string-processing/
C/C++处理十六进制数和字符串小结,包括十六进制数组和字符串的相互转换,二进制字符串和十六进制数组的转换,不定长字符串的读取等。
十六进制数组和字符串的相互转换
例如 { 0x23, 0x3A, 0x46, 0x4C, 0x52 } <=> “233A464C52”
/************************************************************************
* 功能:将一个十六进制字节串转换成 ASCII 码表示的十六进制的字符串
* 输入参数:pHex -- 十六进制数字节串首地址
* pAscii -- 转换后的 ASCII 码表示的十六进制字符串的首地址
* nLen -- 要转换的十六进制数的长度(字节数)
* 输出参数:None
* 注: 转换后的结果全部是大写 ASCII 表示的十六进制数
************************************************************************/
void HexToAscii(unsigned char * pHex, unsigned char * pAscii, int nLen)
{
unsigned char Nibble[2];
for (int i = 0; i < nLen; i++)
{
Nibble[0] = (pHex[i] & 0xF0) >> 4;
Nibble[1] = pHex[i] & 0x0F;
for (int j = 0; j < 2; j++)
{
if (Nibble[j] < 10)
Nibble[j] += 0x30;
else
{
if (Nibble[j] < 16)
Nibble[j] = Nibble[j] - 10 + 'A';
}
*pAscii++ = Nibble[j];
} // for (int j = ...)
} // for (int i = ...)
}
/****************************************************************************
* 功能:将一个 ASCII 码表示的十六进制字符串转换成十六进制的字节串
* 输入参数:pAscii -- 转换后的 ASCII 码表示的十六进制字符串的首地址
* pHex -- 十六进制数字节串首地址
* nLen -- 要转换的 ASCII 码表示的十六进制字符串的长度(字节数)
* 输出参数:None
* 注: 要求输入的 ASCII 码表示的十六进制数的字符个数必须为偶数,除了是1 - 9 和 A(a) - F(f) 以外没有别的字符
**************************************************</


5696

被折叠的 条评论
为什么被折叠?



