进制大家应该都挺熟悉的了,我们就可以也用Qt来做个实例,来个进制的转换。
下面是二进制转为十进制和十六进制的槽函数:
void Widget::onBtn1Click()
{
//读取二进制的数,转换为其他进制
QString str=edit1->text();
bool ok;
int val = str.toInt(&ok,2); //以二进制数读入
str = str.setNum(val,10); //转为十进制字符串
edit2->setText(str);
str = str.setNum(val,16); //转为十六进制字符串
str = str.toUpper();
edit3->setText(str);
}
十进制转为二进制和十六进制的槽函数:
void Widget::onBtn2Click()
{
QString str=edit2->text();//读取十进制数
int val = str.toInt();
str = str.setNum(val,2);//转为二进制字符串
str = str.toUpper();
edit1->setText(str);
str = str.setNum(val,16);//转为十六进制字符串
edit3->setText(str);
}
把页面搭建好呢,然后把按钮跟槽函数连接好就行了:
connect(btn1,&QPushButton::clicked,this,&Widget::onBtn1Click);
connect(btn2,&QPushButton::clicked,this,&Widget::onBtn2Click);
那么我们是怎样将一个整数转换为不同进制的字符串的呢,我们可以使用QString的函数 setNum() 或静态函数 number(),setNum 和 number 有多个重载函数定义,可以处理各种类型的整数和浮点数,在处理整数时还可以指定进制,它们的函数原型是下面这个:
Qstring &setNum (int a, int val= 10)
QString number (int a, int val= 10)
里面的 a 是待转换的整数,val是使用的进制,缺省为十进制,也可以指定为十六进制和二进制。
我们也可以使用 QString 的静态函数 number() 和 asprintf(), QString 的 sprintf() 函数与 C 语言里的 sprintf() 函数的格式是一样的。
效果如下: