QT中16进制二进制字符串的转换

最近使用串口通信操作nfc卡的扇区内的内容设及到了很多数据类型之间的转换,今天总结一下。

1、10进制16进制字符串相互显示
10->16
int a=10;
Qstring b = QString("%1").arg(b,2,16,QLatin1Char(‘0’));
参数说明 参数1即需要转换的int型数字 参数2 表示 最小宽度 参数3 表示要转的进制类型 参数4为填充数字

16->10
bool ok;
qbytearray a;//假设字符数组里面存储了一些16进制数
将数组第一位转为字符串 Qstring str = a[0].tohex();
int b = str.toint(&ok,16);//将字符串以16进制显示并转为10进制

2、将Qbytearray以字符串显示
有两种方法 第一种: Qbytearray a; a.tohex();
第二种: QString showHEX(QByteArray str) { QDataStream out(&str,QIODevice::ReadWrite); QString buf; while(!out.atEnd()) { qint8 outChar = 0; out >>outChar; QString str = QString("%1").arg(outChar&0xff,2,16,QLatin1Char('0')).toUpper(); buf +=str; } return buf; }showHEX(a);
3、十进制转为ascll字符

  int dec = 65;

  char ch = dec;

  QString decToStr = QString(ch);

4、double或float类型转换为可控制精度的10进制字符串
double dou = 1234.56789;
//arg()的参数含义为:1.要转换的double或float型数据 2.目标数据的位宽,填0即可
//3.格式控制,’ 4.精度,即精确到小数点后的位数,最后一位会四舍五入
QString douToStr = QString("%1").arg(dou,0,‘f’,3); //douToStr = “1234.568”;
5、int转2进制 二进制数 组合成16进制数
int a=2;
QString b = QString("%1").arg(a,2,2,QLatin1Char(’ 0’));//转为2进制
QString hex = QString("%1%2%3%4").arg(“10”).arg(b).arg(“01”).arg(“11”);
//四个二进制数组合 即 10 10 01 11
二进制转16进制 第一种方法:
bool ok;
int c = hex.toint(&ok,2);//先转为10进制
Qstring d = QString("%1").arg(c,2,16,QLatin1Char(‘0’)); //10进制转16进制

第二种方法
QString new_hex=BinToHex(hex); //将新的16进制显示出来

//二进制转16进制
QString BinToHex(QString strBin)
{
    QString strout;
    QString strH,strL;
    QString stroutH,stroutL;
    qDebug()<<strBin;
    strH=strBin.mid(0,4);
    strL=strBin.mid(4,4);
    if(strH=="1111")
    {
        stroutH="F";
    }
    if(strH=="1110")
    {
        stroutH="E";
    }
    if(strH=="1101")
    {
        stroutH="D";
    }
    if(strH=="1100")
    {
        stroutH="C";
    }
    if(strH=="1011")
    {
        stroutH="B";
    }
    if(strH=="1010")
    {
        stroutH="A";
    }
    if(strH=="1001")
    {
        stroutH="9";
    }
    if(strH=="1000")
    {
        stroutH="8";
    }
    if(strH=="0111")
    {
        stroutH="7";
    }
    if(strH=="0100")
    {
        stroutH="6";
    }
    if(strH=="0101")
    {
        stroutH="5";
    }
    if(strH=="0100")
    {
        stroutH="4";
    }
    if(strH=="0011")
    {
        stroutH="3";
    }
    if(strH=="0010")
    {
        stroutH="2";
    }
    if(strH=="0001")
    {
        stroutH="1";
    }
    if(strH=="0000")
    {
        stroutH="0";
    }






    if(strL=="1111")
    {
        stroutL="F";
    }
    if(strL=="1110")
    {
        stroutL="E";
    }
    if(strL=="1101")
    {
        stroutL="D";
    }
    if(strL=="1100")
    {
        stroutL="C";
    }
    if(strL=="1011")
    {
        stroutL="B";
    }
    if(strL=="1010")
    {
        stroutL="A";
    }
    if(strL=="1001")
    {
        stroutL="9";
    }
    if(strL=="1000")
    {
        stroutL="8";
    }
    if(strL=="0111")
    {
        stroutL="7";
    }
    if(strL=="0100")
    {
        stroutL="6";
    }
    if(strL=="0101")
    {
        stroutL="5";
    }
    if(strL=="0100")
    {
        stroutL="4";
    }
    if(strL=="0011")
    {
        stroutL="3";
    }
    if(strL=="0010")
    {
        stroutL="2";
    }
    if(strL=="0001")
    {
        stroutL="1";
    }
    if(strL=="0000")
    {
        stroutL="0";
    }


    strout=stroutH+stroutL;
    qDebug()<<strout;


    return strout;
}




  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值