欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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