QT QSTring,qint string,const char数据类型转换(实例教程)

本文详细介绍了QString类的各种类型转换方法,包括整型、浮点型、字符和时间的转换,以及QString与其他数据类型如char、QByteArray之间的转换技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QString类提供了丰富的转换函数,可以将一个字符串转换为数值类型或者其他的字符编码集。QString::toInt()函数将字符串转换为整型数值,类似的函数还有toDouble()、toFloat()、toLong()、toLongLong();

 

 

 

1、  int, float , double类型 转换为QString

 

 

有两种方法:

A .  使用arg

 

 

    long a = 36;  
    QString s = QString("%1").arg(a);   // s == "36"  // int 转 QSting

 

 

    QString stepInfo = tr("Time: <b>%1</b>")
                       .arg(QString::number(timestamp,10), 8, '0'); //10进制,8位,不足补0

 

 

 

 

 

 

B .  使用QString::number() ;

 

 

    long a = 63;  
    QString s = QString::number(a, 10);             // s == "63"  
    QString t = QString::number(a, 16).toUpper();     // t == "3F"  //toUpper: 大写
 

 

 


 
  1. static QString number(int, int base=10);

  2. static QString number(uint, int base=10);

  3. static QString number(long, int base=10);

  4. static QString number(ulong, int base=10);

  5. static QString number(qlonglong, int base=10);

  6. static QString number(qulonglong, int base=10);

  7. static QString number(double, char f='g', int prec=6);

 

 

第二参数可省略,省略时为10,表示10进制;

 

2、 QString 转换为 int类型

 

 

 

基数默认为10,基数须在2到36之间;

 

 

    Qstring str="FF";  
    bool ok;  
    int dec=str.toInt(&ok,10); //dec=255 ; ok=true    //QString 转 int
    int hex =str.toInt(&ok,16); //hex=255;ok=true;    //QString 转 int
 

 

 

3、 QString 转换为 double类型

 

 

 

 

    QString str="123.45";  
    double val=str.toDouble(); //val=123.45  //QString 转 double

 

 

 

    bool ok;  
    double d;  
    d=QString("1234.56e-02").toDouble(&ok); //ok=true;d=12.3456
 

 

 

 

4、 QString 转换为float 类型

 

 

 

    QString str="123.45";  
    float d=str.toFloat(); //d=123.45  
 

 

 

    QString str="R2D2";  
    bool ok;  
    float d=str.toFloat(&ok); //转换是被时返回0.0,ok=false;  
 

 

 

5、 QString 与 char 互转

 

 

1 >  char 转 QString

 

 

    char a='b';
    QString str;
    str=QString(a);

 

 

2 >  QString 转 char

 

 

    QString str="qq";
    char *ch;
    ch = str.toLatin1.data();

 

 

 

6 、 const char * 转 char *

 

 

 

    char *ch1="tt";
    const char *ch2="qq";
    ch1 = (char *)ch2;

 

 

 

7、 char *  与 QByteArray 互转

 

 

1 >   QByteArray 转 char *

 

 

    char *ch;
    QByteArray byte;
    ch = byte.data();

 

 

2 > char * 转 QByteArray 

 

 

    char *ch;
    QByteArray byte;
    byte = QByteArray(ch);

 

 

 

8、 QString 转换为char*

 

 

QString提供的字符编码集的转换函数将会返回一个constchar*类型版本的QByteArray,即构造函数QByteArray(constchar*)构造的QByteArray对象。QByteArray类具有一个字节数组,它既可以存储原始字节(raw bytes),也可以存储传统的以“\0”结尾的8位的字符串。在Qt中,使用QByteArray比使用const char*更方便,且QByteArray也支持隐式共享。转换函数有以下几种。

 

 

① toAscii():返回一个ASCII编码的8位字符串。

② toLatin1():返回一个Latin-1(ISO8859-1)编码的8位字符串。

③ toUtf8():返回一个UTF-8编码的8位字符串(UTF-8是ASCII码的超级,它支持整个Unicode字符集)。

④ toLocal8Bit():返回一个系统本地(locale)编码的8位字符串。

 

 

 

    QString qstr("hello,word");  
    const char * p = qstr.toLocal8Bit().data();  

 

    const char *p2 = qstr.toStdString().data(); 
 

 

9、 QByteArray  与 QString 互转

 

 

1 > QByteArray  转 QString

 

 

    QByteArray byte;
    QString string;
    string = QString(byte);
 

 

2 > QString  转 QByteArray  

 

 

    QByteArray byte;
    QString string;
    byte = string.toAscii();
 

 

 

 

10、当前时间转化为QString

 

 

 

 

    QString b_dateTime;
    b_dateTime.append(tr("%1").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")));
 

 

 

11、数值合并

 

 

QByteArray 中的两个字节合并成一个低八位一个高八位数据。

 

 

    QByteArray handle_Data;  
    //  byte0为高8位
    // 取出对应位的16进制char型之后转换为16进制的int型(强制转换)
    int data1= (unsigned char)handle_Data.at(0);  
    //  byte1为低8位
    // 取出对应位的16进制char型之后转换为16进制的int型(强制转换)
    int data2= (unsigned char)handle_Data.at(1);  
    int data_sum= data1<<8|data2;//移位8位是一个字节
    // 将16进制data_sum转换为string类型的10进制数便于在text上显示
    QString  data_string= QString::number(data_sum,10);

 

1.QString转换String

string s = qstr.toStdString();

2.String转换QString

QString qstr2 = QString::fromStdString(s);

 

  1. string str("hello world !");

  2. const char * s = str.c_str();

  3. QString qs1= "Hello , world !";
    QByteArray ba = qs1.toLocal8Bit();
    const char *s = ba.data();
    const char *s2 = ba.constData();

 

 

QString qs1= "Hello , world !";
string str = qs1.toStdString();
const char *s= str.c_str();
 

<think>好的,我现在需要回答用户关于Qt串口通信中write(const char *data)函数的用法和示例的问题。用户之前可能问过相关问题,但根据提供的引用,用户现在具体需要知道如何正确使用这个函数。 首先,我需要回忆Qt中QSerialPort类的write函数。write函数有多个重载,其中一个接受const char*和数据长度。另一个重载接受QByteArray。用户特别提到的是const char*的版本,所以需要重点讲解这个。 接下来,我需要确保示例代码正确,并且符合Qt的标准用法。例如,打开串口、配置参数(波特率、数据位、停止位、校验位),然后发送数据。用户提供的引用中有myWidget类的代码,其中sendInfo函数可能调用了write,但用户需要具体的例子。 然后,考虑是否需要将字符串转换char*。例如,QStringconst char*可能需要使用toLatin1()或toUtf8(),然后获取data()指针。需要注意数据的作用域,避免悬空指针。 另外,要提醒用户检查串口是否成功打开,否则write会失败。返回值是写入的字节数,可以用来判断是否成功。错误处理也是重要的一部分,比如处理QSerialPort::SerialPortError。 还要注意线程安全,确保在正确的线程中操作串口。可能需要使用信号和槽来跨线程发送数据。 最后,生成相关问题,帮助用户深入理解,比如数据转换、错误处理、多线程使用等。确保问题与用户当前需求相关,并引导他们进一步学习。</think>关于QT串口通信中$QSerialPort::write(const char *data)$函数的用法,以下是详细说明和示例: ### 一、函数原型 $$qint64 QSerialPort::write(const char *data, qint64 len)$$ 参数说明: - $data$:要发送的字节数组指针 - $len$:发送数据的字节长度 返回值:实际写入的字节数,若为-1表示出错 ### 二、使用步骤 1. **串口初始化**(参考您提供的代码结构): ```cpp m_serialPort = new QSerialPort(this); m_serialPort->setPortName("COM1"); // Windows端口命名 m_serialPort->setBaudRate(QSerialPort::Baud115200); m_serialPort->setDataBits(QSerialPort::Data8); m_serialPort->setParity(QSerialPort::NoParity); m_serialPort->setStopBits(QSerialPort::OneStop); if(!m_serialPort->open(QIODevice::ReadWrite)) { QMessageBox::critical(this, "错误", "串口打开失败"); } ``` 2. **数据发送示例**: ```cpp // 发送字符串 const char *msg = "AT指令测试\r\n"; qint64 bytesWritten = m_serialPort->write(msg, strlen(msg)); if(bytesWritten == -1) { qDebug() << "发送失败:" << m_serialPort->errorString(); } // 发送二进制数据 char binaryData[] = {0x01, 0x02, 0x0A, 0xFF}; m_serialPort->write(binaryData, sizeof(binaryData)); ``` 3. **结合QByteArray的用法**: ```cpp QByteArray data; data.append(0x48); // ASCII 'H' data.append(0x65); // ASCII 'e' m_serialPort->write(data.constData(), data.size()); ``` ### 三、注意事项 1. 必须确保串口已成功打开($isOpen()$返回true)后才能调用write 2. 建议配合$bytesWritten()$信号实现异步写入: ```cpp connect(m_serialPort, &QSerialPort::bytesWritten, [](qint64 bytes){ qDebug() << "已发送字节数:" << bytes; }); ``` 3. Windows平台字符串建议转换为ANSI编码,Linux/macOS使用UTF-8编码[^1]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlexFang0904

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值