Qt中使用qt自带的函数实现各种进制间的相互转换,easy.
文章目录
- 一.十进制转各种进制
- 第一种:使用QString的静态函数`number`
- 第二种:使用QString的拼接函数`arg`
- 二.各种进制相互转换
一.十进制转各种进制
第一种:使用QString的静态函数number
①使用QString的静态函数number即可,如我把字符串"8m
"中的每个字符转化为ascii表中的十进制,然后在从十进制转化为16进制,如下
8字符对应的ascii表十进制为:56
m字符对应的ascii表十进制为:109
只用QString::number(int(c), 16);
后,转化为36 6d
QString静态函数QString::number格式为
QString::number(十进制, 要转化的进制);
函数原型如下:
第二种:使用QString的拼接函数arg
这个Qt的QString函数arg中就全部封装好了,就是我们常用来字符串拼装用的.arg
函数
进制转换arg函数参数说明:
①要转换的整数
②填充宽度
③要转换的进制,如2,8,16进制
④填充字符,就是指定宽度,当转化后没有填充上的,前面自动补填充字符
列子: 将10进制的100转化为16进制的字符串,转化后为:0064
,100的16进制为64,所占宽度2,但指定宽度为4,所以前面两位没有填充上的用填充字符'0'
进行填充
函数原型如下:
二.各种进制相互转换
要实现各种进制的相互转换,就要借助十进制作为中间人
,进行转换啦,如2进制要转换为16进制,就先把2进制转换为十进制,然后在把10进制转换为16进制
就行啦,即2进制->10进制->16进制
,以此类推。
问题就是怎么将不是十进制的数转换为10进制呢?
简单,用QString的toInt
函数即可,如果数太大,用toLong, toLongLong
,转换成功返回一个十进制的数,如果转换失败,则返回0。
源码函数原型如下
参数说明:
①一个bool的指针,通过将ok设置为false来报告失败,通过将ok设置为true来报告成功。
②要转化的字符串指定进制格式,如字符串是二进制的,就要填2
还是一样,举个例子,将二进制数11111111,转换为16进制的数
QString bin = "11111111";
bool ok;
int dec = bin.toInt(&ok, 2);
QString Hex = QString::number(dec, 16);
这个不难理解,就不多说了
到这里各种进制间的相互转换,就完成了,熟悉了,信手拈来。
也不难,Qt都写好封装的函数了,我们只要理解会用就行了,想要了解转换原理的,可以去看下qt的底层实现源码