尽管QByteArray类是一个集合,但也可以作为一个特殊形式的数值来用,其灵活的转换格式可大大一方便各种格式数据转换与显示的需求,如显示二进制和十六进制、显示科学记数和指定小数位的数值。QByteArray类的公有静态函数number可以完成这些功能,该函数可以将某个整数转为某种进制的字符数组,函数number的原型声明如下:
QByteArray number(int n, int base = 10)
其中,参数n是要转变的整数;base是要进行转换的进制,进制取值范围为2到36,即从二进制到三十六进制。该函数返回整数n对应的base进制的字符数组。下列代码演示了number函数的使用:
int n = 63;
qDebug () <<QByteArray: :number (n) ;// returns "63"
qDebug ()<<QByteArray: :number(n, 16);// returns "3f"
qDebug()<<QByteArray::number (n, 16).toUpper(); // returns "3F"
qDebug () <<QByteArray::number (n, 2);// returns "111111"
qDebug ()<<QByteArray: :number (n, 8);// returns "77"
?与此公有静态函数功能类似的公有函数是setNum,该函数也是将某个整数转为某种进制的字符数函数的原型声明如下:
QByteArray & setNum(int n, int base = 10)
其中,参数n是要转变的整数;base是要进行转换的进制,进制取值范围为2到36, 即从二进制到三十六进制。该函数返回整数n对应的base进制的字符数组。下列代码演示了setNum函数的使用:
QByteArray ba;
int n = 63;
ba.setNum(n);// ba an "63"
ba.setNum(n, 16); ba == "3f"
因为不是静态函数,所以要用对象来调用。此外,根据setNum()函数第一个参数的类型,setNum函数可以有多种版本,比如:
QByteArray &QByteArray::setNum(ushort n, int base =10)
QByteArray &QByteArray::setNum(short n, int base = 10)
QByteArray &QByteArray::setNum(uint n, int base = 10)
QByteArray &QByteArray::setNum(qlonglong n, int base = 10)
用法类似,只是n的取值范围不同。除了整数之外,还能把数值按指定格式和小数位转换输出,所调用的函数依旧是number,只不过参数形式变了:
QByteArray number(double n, char f= 'g', int prec = 6)
其中,参数n是要进行转换的实数;f表示转换格式,取值如下:
其中,参数n是要进行转换的实数:表示转换格式,取值如下:e:采用指数法表示实数,此时实数的格式如[-]9.9E: 格式同e,不过E要大写。f:普通小数表示法,此时格式如[-]9.9g: 使用e或格式,第三个参数表示有效数字位的个数,G: 使用E或f格式,第三个参数表示有效数字位的个数当参数f为'e、'E'或'f'时,prec表示十进制小数点后小数部分的位数;当f为'g'或'G时, prec表示有效数字位数的最大数目。注意,小数位要四舍五入。