1:取出字符串。
2:去掉字符串首尾的空格
3:循环取出字符串中的单个字符。
4:判断取出的单个字符是否在0—9 、A—F、a—f之中。
5:转换思路:
a:把取到的字符减去一个合适的数值,转换为十进制的数字(字符串->十进制)
b:因为一个字符(8 bits),所以十位的字符应该左移4位之后 或上 (个位数字 与上 0x0F)的结果。
6:代码转换如下:(vc代码:)
for (int j=0 ,i=0;j<cStr.GetLength();j+=3,i++)
{
getStr = cStr.Mid(j,2); //获取子字符串内容
strcpy(buf,getStr.GetBuffer(getStr.GetLength()));//把CSting 字符串保存到字符数组中
int a=buf[0];//十六进制中的个位
int b=buf[1];//十六进制中的十位
if (a >= 48 && a <= 57)
{
a -= 48;//48 == '0'
}else if(a >= 97 && a <= 102)
{
a -= 87;//97 == 'a'
}
else if (a >= 65 && a <= 70)
{
a -= 55;//65 == 'A'
}
else
{
CString Err0;
Err0.Format("发现非法数字 %c 输入,请重新输入",buf[0]);
MessageBox(Err0);
return;
}
if (b >= 48 && b <= 57)
{
b -= 48;
}else if(b >= 97 && b <= 102)
{
b -= 87;
}
else if (b >= 65 && b <= 70)
{
b -= 55;
}
else
{
CString Err1;
Err1.Format("发现非法数字 %c 输入,请重新输入",buf[1]);
MessageBox(Err1);
return;
}
unsigned char c = ((a << 4) | (b & 0x0F ));
s_au8TagIDBuf[i] = c; //我们要的十六进制数字
}