【Qt 不限制QString长度的进制转换】 您所在的位置:网站首页 八进制转十六进制算法公式 【Qt 不限制QString长度的进制转换】

【Qt 不限制QString长度的进制转换】

2023-06-28 16:08| 来源: 网络整理| 查看: 265

本文讨论二进制、八进制、十六进制三者之间不限制QString长度的进制转换算法。对于涉及十进制且不限制QString长度的进制转换,本人能力有限,不能解决该问题,故不做讨论。

但是Qt有提供进制转换,受限于类型长度,占用最大空间的qint64(qlonglong)类型为8个字节,64位,所能表示的数字有限,所以有长度限制。

如果涉及十进制转换问题,可以暂且使用Qt提供的方法,只是要牺牲不限制字符串长度这一要求。

二进制 至 八进制

3个二进制位即可表示一个八进制数字。所以将二进制字符串以3个为一组,进行转换。

QString twoToEight(const QString& in){ int inLen=in.size(); QString out; int singleNum=0; //单个八进制数字 for(int i=inLen-1;i>=0;i--){ int num=in.at(inLen-i-1).digitValue(); //从首位开始向后取,与循环方向相反 int mod=i%3; //对应一组中的位置 不同的位置不同的权 switch(mod){ case 0:singleNum+=num;out.append(QString::number(singleNum));singleNum=0;break; case 1:singleNum+=num*2;break; case 2:singleNum+=num*4;break; } } return out; } 二进制 至 十六进制

跟二进制至八进制差不多,不同的是,4个二进制位可表示一个八进制数字,所以将二进制字符串4个为一组,进行转换。

QString twoToHex(const QString& in){ int inLen=in.size(); QString out; int singleNum=0; //单个十六进制数字 for(int i=inLen-1;i>=0;i--){ int num=in.at(inLen-i-1).digitValue(); //从首位开始向后取,与循环方向相反 int mod=i%4; //对应一组中的位置 不同的位置不同的权 switch(mod){ case 0:singleNum+=num;out.append(QString::number(singleNum,16));singleNum=0;break; case 1:singleNum+=num*2;break; case 2:singleNum+=num*4;break; case 3:singleNum+=num*8;break; } } return out; } 八进制 至 二进制

一个八进制字符可以转换为3个二进制字符,与二进制转八进制相反。

QString eightToTwo(const QString& in){ int inLen=in.size(); QString out; for(int i=0;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有