Qt 数字和字符处理总结

时间:2023-03-09 14:50:36
Qt 数字和字符处理总结

1. 四舍五入保留小数几位

 QString str="12.3456789";
double d1=str.toDouble();
qDebug()<<"d1"<<d1;//12.3457 QString str1=QString::number(d1,'f',);//3 保留几位小数 qDebug()<<"str1"<<str1;//12.346

2.

    QByteArray macAddress = QByteArray::fromHex("123456abcdef");

        qDebug()<<"macAddress:"<<macAddress.toHex(':');//12:34:56:ab:cd:ef
  QByteArray ba;
ba.resize();
ba[]=0x7E;
ba[]=0x51;
ba[]=0x7E;
qDebug()<<ba.toHex(' ');//7e 51 7e"

4.QString  -> char*

#include<QTextCodec>

   QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QString str="中国人民";
char* ch;
// QByteArray ba = str.toLatin1();
QByteArray ba = str.toLocal8Bit();
ch=ba.data();
qDebug()<<ch;

5. char*-> QString

  QString str;
char *msg;
str = QString::fromLocal8Bit(msg);

6.十进制转化二进制,指定位数,不够补零

 int a=;
QString str = QString("%1").arg(a,,,QLatin1Char(''));
qDebug()<<"---->"<<str;
//----> "00001010"

7.无符号数转换有符合数,modbus读取数据16位时候,有什么需要是负数。原则是:最高位如果是1就是负数,然后取反,加1,添加负号,就是所要的负值。

int AgvProtocol::uintToInt(uint16_t ut)
{
QString binaryStr=QString("%1").arg(ut,,,QLatin1Char(''));
qDebug()<<"modbus readbinaryStr:"<<binaryStr;
if(binaryStr[]=='')
{
int len=binaryStr.length();
int nDec=;
for(int i=;i<len;i++){
if(binaryStr[i]==''){
int k=;
for(int j=;j<len-i-;j++)
{
k=k*;
}
nDec+=k;
}
} return -(nDec+); }
else {
return ut;
}
}