c++ 16进制数形式的字符串转换为16进制数

项目中上位机给下位机发送的指令是16进制数,需要将从控制台输入的string类型数据(比如"AA BB 03 00 07 00 02 CC")转换为对应大小的16进制数。

//HexChar()将16进制字符转换为相应大小的16进制数
char HexChar(char c)
{
    if((c>='0')&&(c<='9')) 
        return c-'0';
    else if((c>='A')&&(c<='F'))
        return c-'A'+10;
    else if((c>='a')&&(c<='f'))
        return c-'a'+10;
    else
        return 0x10;
}

//Str2Hex()将16进制字符串转换为对应的16进制数并存入char数组中
//返回char数组字节长度,即一共转换了多少个数
int Str2Hex(CString str, char *data)
{
    int t,t1;
    int rlen=0,len=str.GetLength();
    if(len==1)
    {
        char h=str[0];
        t=HexChar(h);
        data[0]=(BYTE)t;
        rlen++;
    }
    //data.SetSize(len/2);
    for(int i=0;i<len;)
    {
        char l,h=str[i];
        if(h==' ')
        {
            i++;
            continue;
        }
        i++;
        if(i>=len)
            break;
        l=str[i];
        t=HexChar(h);
        t1=HexChar(l);
        if((t==16)||(t1==16))
            break;
        else
            t=t*16+t1;
        i++;
        data[rlen]=(BYTE)t;
        rlen++;
    }
    return rlen;
}
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值