CString与Hex之间的相互转换
程序员文章站
2024-03-18 14:36:58
...
问题描述
在写网络调试助手或者写串口调试助手的时候会用到CString与Hex之间的相互转换
代码实现
1. ASCII转成HEX
//Ascii转HEX
CString CNetAssistDlg::Ascii2Hex(CString str_ASCII)
{
int i;
int length = str_ASCII.GetLength();
CString str_HEX;
CString temp;
for (i = 0; i < length; i++)
{
temp.Format(_T("%2X "), str_ASCII.GetAt(i));
str_HEX = str_HEX + temp;
}
return str_HEX;
}
2. HEX转成ASCII
//HEX转ASCII
CString CNetAssistDlg::Hex2Ascii(CString str_HEX)
{
int i, num, cnt;
BOOL is_space = FALSE;
int length = str_HEX.GetLength();//CString类型的HEX
CString str_ASCII;//最终转换出的ASCII
char* char_ASCII = (char*)malloc(length * sizeof(char));//实际上远远小于这个数据
memset(char_ASCII, 0, length * sizeof(char));
str_ASCII.Empty();
char char_temp;
num = 0;
cnt = 0;
for (i = 0; i < length; i++)
{
char_temp = str_HEX.GetAt(i);
if (' ' == char_temp || '\n' == char_temp || '\t' == char_temp || '\r' == char_temp)
{
if (FALSE == is_space)
{
is_space = TRUE;
num++;
}
continue;//如果是空格,直接进入下一个
}
if (char_temp >= '0' && char_temp <= '9')
{
char_ASCII[num] = char_ASCII[num] * 16 + char_temp - '0';
cnt++;
is_space = FALSE;// 不是空格
}
if (char_temp >= 'a' && char_temp <= 'z')
{
char_ASCII[num] = char_ASCII[num] * 16 + char_temp - 'a' + 10;
cnt++;
is_space = FALSE;// 不是空格
}
if (char_temp >= 'A' && char_temp <= 'Z')
{
char_ASCII[num] = char_ASCII[num] * 16 + char_temp - 'A' + 10;
cnt++;
is_space = FALSE;// 不是空格
}
if (cnt >= 2)
{
cnt = 0;
num++;
is_space = TRUE;
}
}
for (i = 0; i <= num; i++)
{
str_ASCII.AppendChar(char_ASCII[i]);
}
free(char_ASCII);
return str_ASCII;
}
上一篇: 冒泡排序(用C语言实现)
下一篇: Qt下实现16进制收发数据