QT--字符串转十六进制

本文为学习记录,若有错误,请及时联系作者,谦虚受教。


前言

治愈自己最好的方式,

就是忙碌和早睡。


一、字符串转为十六进制

代码:
.h文件

public:
    static char ConvertHexChar(char c);
    static QByteArray QString2Hex(QString hexStr);

.cpp文件

//字符串
QByteArray MainWindow::QString2Hex(QString hexStr)
{
    QByteArray senddata;
    int hexdata, lowhexdata;
    int hexdatalen = 0;
    int len = hexStr.length();
    senddata.resize(len/2);
    char lstr, hstr;
    for(int i = 0; i < len; )
    {
        //将第一个不为' '的字符赋给hstr;
        hstr = hexStr[i].toLatin1();
        if(hstr == ' ')
        {
            i++;
            continue;
        }
        i++;
        //当i >= len时,跳出循环
        if(i >= len)
            break;
        //当i < len时,将下一个字符赋值给lstr;
        lstr = hexStr[i].toLatin1();
        //将hstr和lstr转换为0-15的对应数值
        hexdata = ConvertHexChar(hstr);
        lowhexdata = ConvertHexChar(lstr);
        //
        if((hexdata == 16) || (lowhexdata == 16))
            break;
        else
            hexdata = hexdata * 16 + lowhexdata;
        i++;
        senddata[hexdatalen] = (char)hexdata;
        hexdatalen++;
    }
    senddata.resize(hexdatalen);
    return senddata;
}
//单个字符
char MainWindow::ConvertHexChar(char c)
{
    if((c >= '0') && (c <= '9'))
        return c - 0x30;
    else if((c >= 'A') && (c <= 'F'))
        return c - 'A' + 10;//'A' = 65;
    else if((c >= 'a') && (c <= 'f'))
        return c - 'a' + 10;
    else
        return -1;
}

在需要转换的地方可采取调用

QByteArray QString2Hex( hexStr);

二、直接调用函数

.tohex()是将字符串转换成16进制。
.fromhex()是将十六进制转换成字符串。

//选择十六进制框
void MainWindow::on_sendBase_checkbox_stateChanged(int arg1)
{
    QString str=ui->sendtextEdit->document()->toPlainText();//获取发送的信息
    if(arg1==0)//不选
    {
        QByteArray sendData1=str.toUtf8();
        sendData1=sendData1.fromHex(sendData1);//从QByteArray转换为QString
        ui->sendtextEdit->document()->setPlainText(sendData1);
    }
    else {
        QByteArray sendData=str.toUtf8();//QString转换为QByteArray
        sendData=sendData.toHex(' ').toUpper();//转换成QByteArray -> 转换成16进制数,按空格分开
        ui->sendtextEdit->document()->setPlainText(sendData);
    }
}

总结

善于总结,多进一步。

  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值