CString与16进制的CByteArray之间相互转化
程序员文章站
2022-03-14 15:56:32
...
//将单个字符转为相应的16进制数,否则返回16
char Hex2Char(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;
else return 16;
}
//将CS中的字符串转为存储16进制数的CByteArray类型Hexs
//按照字符串中16进制字符进行转换,忽略所有非16进制字符
void CS2CB(CString &CS,CByteArray &Hexs)
{
INT_PTR len = CS.GetLength();
INT_PTR Len(0);//最终字节长度
Hexs.SetSize(len/2);
Hexs.RemoveAll();
BYTE HexH,HexL;//十六位的高低字节
//BYTE HexD(0);//十六进制数据
for( int k=0; k<len; k++)
{
if((HexH=Hex2Char(CS.GetAt(k)))<16)//找到一个字符为16进制数字为高位
{
do
{
k++;
}while(k<len && (HexL=Hex2Char(CS.GetAt(k)))==16);//找到下一个16进制数字为高位
if(k<len)
{
Hexs.Add(HexH*16+HexL);
Len++;
}
else
{
//找不到低位,则只有低位(高位变低位)
Hexs.Add(HexH);
Len++;
}
}
}
Hexs.SetSize(Len);
}
//将存储在CByteArray中的16进制数组,转化为表示16进制数的CString类型字符串
void CB2CS( CByteArray &Hex,CString &dst)
{
dst.Empty();
int k(0),len(Hex.GetSize());
for(;;)
{
dst.AppendFormat(_T("%x"),Hex.GetAt(k));
if(++k<len)
dst.Append(_T("-"));
else
break;
}
}
转载于:https://my.oschina.net/makeit/blog/287686
上一篇: QT 16进制与10进制转化