我是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传输呢?
答案 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
的指针,所有参数都设置并打开且没有错误。