2013-05-02 84 views
2

我是Qt的新手,需要准备一个项目来发送来自rs232的十六进制命令。 QString行包含64位二进制数据,我必须转换为十六进制数据并通过rs232发送。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); 

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

回答

4

首先 - 你应该使用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(); 

_com是一个指向QtSerialPort,所有参数设置和开通没有错误。