Qt中的串口通信

时间:2013-05-02 13:12:08

标签: qt serial-port qtserialport

我是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传输呢?

1 个答案:

答案 0 :(得分:4)

首先 - 你应该真的使用QtSerialPort

其次 - QString是一个类,它与实际字符串一起使用。 QByteArray适用于原始数据。当您撰写QString line = in.readAll();时,它会隐式调用使用QString(const QByteArray &ba)的{​​{1}}。

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

QString::fromAscii

<强>更新

引用

  

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

发送

解决方案

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

其中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的指针,所有参数都设置并打开且没有错误。