【问题标题】:Serial port communication in QtQt中的串口通信
【发布时间】:2013-04-26 16:16:21
【问题描述】:

我是 Qt 新手,需要准备一个项目以从 rs232 发送十六进制命令。 QString 行包含 64 位二进制数据,我必须将其转换为十六进制并通过 rs232 发送。

 QString a=ui->comboBox->currentText();
    QString s1;
    s1="./calc "+a;
    QProcess p1;
    p1.start(s1);
    p1.waitForFinished(-1);
    QString line ;
     //read
           QFile file("TeleOutput.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         return;
     QTextStream in (&file);
  line = in.readAll();
    ui->plainTextEdit->setPlainText(line);

那么,如何将 QString 行中的 64 位二进制数据转换为十六进制值并通过 rs232 传输呢?

【问题讨论】:

    标签: qt serial-port qtserialport


    【解决方案1】:

    首先 - 你真的应该使用QtSerialPort

    其次 - QString 是一个类,它与 actual 字符串一起使用。 QByteArray 使用原始数据。当您编写QString line = in.readAll(); 时,它会隐式调用QString(const QByteArray &ba),它使用QString::fromAscii

    最后,如果你想处理 64 位整数,你应该这样做:

    quint64 d;
    QDataStream stream(&file);
    while (!stream.atEnd())
    {
        stream >> d;
        process(d);
    }
    

    更新

    引用

    我的问题是在 plainTextEdit “1111110101000101010101010101010101010101010101010101010……”64 位数据已填充,我需要将此数据转换为十六进制并通过 rs232 发送

    解决方案

    QString binData = plainTextEdit.toPlainText();
    QByteArray result;
    while (binData.size() >= 64)
    {
        quint64 d;
        QString dataPiece = binData.left(64);
        binData.remove(0, 64);
        d = dataPiece.toULongLong(0, 2);
        result += QByteArray::number(d);
    }
    _com->write(result);
    _com->flush();
    

    其中_com 是指向QtSerialPort 的指针,所有参数均已设置并无错误打开。

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 1970-01-01
      • 2013-08-04
      • 2018-04-19
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多