2

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

4

1 回答 1

5

首先 - 你真的应该使用QtSerialPort

其次 -QString是一个类,它适用于实际的字符串。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();

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

于 2013-05-02T13:22:27.070 回答