2

Qt は初めてで、rs232 から 16 進コマンドを送信するプロジェクトを準備する必要があります。QString 行には、16 進数に変換して rs232 経由で送信する必要がある 64 ビットのバイナリ データが含まれています。

 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 ビット バイナリ データを 16 進数値に変換し、rs232 経由で転送するにはどうすればよいでしょうか。

4

1 に答える 1

5

まず第一に、本当にQtSerialPortを使用する必要があります

第二に、実際のQString文字列で動作するクラスです。生データで動作します。あなたがそれを書くとき、暗黙のうちに を呼び出します。これは を使用します。QByteArrayQString 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 ビット データが入力されていることです。このデータを 16 進数に変換し、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すべてのパラメータが設定され、エラーなしで開かれています。

于 2013-05-02T13:22:27.070 に答える