2013-05-02 6 views
2

Je suis nouveau à Qt et devez préparer un projet pour envoyer des commandes hexadécimales de RS232. La ligne QString contient des données binaires 64 bits que je dois convertir en hexadécimal et les envoyer via rs232.Communication de port série dans Qt

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); 

Alors, comment convertir des données binaires 64 bits dans la ligne QString à la valeur hexadécimale et de la transférer par rs232?

Répondre

4

tout d'abord - vous devriez vraiment utiliser QtSerialPort

Deuxièmement - QString est une classe qui fonctionne avec réelle chaîne. QByteArray fonctionne avec des données brutes. Lorsque vous écrivez QString line = in.readAll();, il appelle implicitement QString(const QByteArray &ba), qui utilise QString::fromAscii.

Enfin, si vous voulez traiter des entiers de 64 bits, vous devez faire quelque chose comme ceci:

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

Mise à jour

Citation:

Mon problème est que dans plainTextEdit "1111110101000101010101010101010101010101010101010101010 ......." 64 données binaires est rempli, je dois convertir ces données en hexadécimal et l'envoyer par rs232

Solution:

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 est un pointeur vers QtSerialPort, avec tous les paramètres définis et ouverts sans fautes.