【Qt 不限制QString长度的进制转换】 | 您所在的位置:网站首页 › 八进制转十六进制算法公式 › 【Qt 不限制QString长度的进制转换】 |
本文讨论二进制、八进制、十六进制三者之间不限制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 实验室设备网 版权所有 |