CString与16进制的CByteArray之间相互转化

//将单个字符转为相应的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值