gpt4 book ai didi

qt - Qt中的串口通信

转载 作者:行者123 更新时间:2023-12-02 05:05:30 24 4
gpt4 key购买 nike

我是 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位二进制数据转换成16进制值,并通过rs232传输呢?

最佳答案

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

更新

引用:

My problem is that in plainTextEdit "1111110101000101010101010101010101010101010101010101010......." 64 bit data is populated , i need to convert this data into hex and send it through 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 的指针,所有参数均已设置并无错误地打开。

关于qt - Qt中的串口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16338936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com