我有:
QString hex = "0234301c4c49541d4741546f77617220a5a91e42411e43311e44332c30301e45332c30301e47737a74756b613742413303";
QByteArray test = QByteArray::fromHex(hex.toLatin1());
现在,我想通过 SerialPort 发送它:
serial = new QSerialPort(this);
serial->setPortName("ttyACM0");
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
if(serial->open(QIODevice::ReadWrite))
{
qDebug()<<"Port is open!";
if(serial->isWritable())
{
qDebug()<<"Yes, i can write to port!";
}
serial->waitForBytesWritten(-1);
serial->write(test.data());
serial->flush(); // Port Error 12 (timed out???)
serial->close()
}
我没有结果(还有小于 127 的字符/字节值似乎被发送,但不是那些超过这个值的值)
我的问题 -> 如何转换此 QByteArray 以正确发送所有字节? (我试图在谷歌中找到答案,但没有成功/我是新手)
最佳答案
您几乎肯定不想调用采用 const char* 的 QSerialPort 写重载。看docs对于那个重载:
Writes data from a zero-terminated string of 8-bit characters to the device.
但是您不是在编写以零结尾的 C 字符串,而是在编写任意二进制数据。因此,您需要直接调用采用 QByteArray 的写入重载,如下所示:
serial->write(test);
正如其他一些评论中所述,在调用 write 之前关于 waitForBytesWritten 的内容也没有多大意义,但您最大的问题是尝试将任意数据的 QByteArray 视为以 null 结尾的 C 字符串.
关于c++ - QSerialPort 和发送字节(值 > 127?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33290888/