c++ - QSerialPort 和发送字节(值 > 127?)

标签 c++ qt serial-port

我有:

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/

相关文章:

C++ 模板样式,旨在更容易理解编译器错误消息

c++ - 指向非模板成员函数指针的模板成员函数指针

c++ - 为什么我的 WM_UNICHAR 处理程序从未被调用?

python - py2exe 可执行文件未正确刷新标准输出

c++ - 设计模式、Qt 模型/ View 和多线程

c++ - 在文件中搜索字符串(逐行),忽略单词之间空格的大小

c++ - Qchar* 到 char* 的转换

serial-port - 尝试从 SMT32 读取串行端口时没有消息显示

Python - 从串行端口数据逐行读取到可用的列表中

c++ - QTreeView 使用示例 - 如何将子节点添加到现有项目?