C++ 写入和读取十六进制trame qt串行端口

C++ 写入和读取十六进制trame qt串行端口,c++,qt,serial-port,C++,Qt,Serial Port,当我打开串行端口时,如何写入和读取十六进制数据 if (serial->isOpen()) { qDebug() << "seccus: " ; static const char buff[] = {0xA1, 0xFF, 0xFF, 0x00,97}; serial->write(buff,sizeof(buff)); } if (serial->bytesAvailable()) { // If there are bytes av

当我打开串行端口时,如何写入和读取十六进制数据

if (serial->isOpen()) {
    qDebug() << "seccus: " ;
    static const char buff[] = {0xA1, 0xFF, 0xFF, 0x00,97};
    serial->write(buff,sizeof(buff));
}
if (serial->bytesAvailable()) {   // If there are bytes available
    QByteArray f_data; // data container
    f_data.clear();

    if (serial->open(QIODevice::ReadWrite)) { // Try to open the port
        while(serial->bytesAvailable()) { // Reading loop
            f_data.append(serial->readAll());
       }

       serial->flush();
    }
    qDebug()<< "the result" << f_data; // Check the result
}

if(!serial->isOpen())
    qDebug() << "carte disconnect"<<serial->errorString();
if(串行->isOpen()){
qDebug()写入(buff,sizeof(buff));
}
如果(串行->字节可用()){//如果有字节可用
QByteArray f_data;//数据容器
f_data.clear();
如果(串行->打开(QIODevice::ReadWrite)){//尝试打开端口
而(串行->字节可用()){//读取循环
f_data.append(serial->readAll());
}
串行->刷新();
}

qDebug()要调试您的问题,我将从简化您尝试执行的操作开始。尝试编写一些测试代码开始,以确保事情按预期进行:

  • 测试序列打开-不应打开
  • 开放序列
  • 测试序列打开-应为
  • 测试字节是否可用-不应为
  • 将数据写入串行。刷新
  • 测试字节是否可用-应为
  • 阅读并打印到屏幕(即测试您是否正确阅读)
  • 关闭串行端口-测试其未打开
  • 也许如果这些步骤中的一个没有如您所期望的那样工作,您至少可以关注为什么那个特定的部分没有工作


    祝你好运。

    当我运行我的代码时,我的终端中没有显示任何内容。我应该将buff转换为Byte吗???我想知道我在这里缺少了什么??我不使用Qt,但是对
    serial->open(QIODevice::ReadWrite)的调用不应该在对
    serial->write(buff,sizeof(buff))的调用之前进行吗
    ?是的,您有理由,但仍然无法工作。似乎我没有任何可用的字节可读取。我需要将十六进制转换为字节吗?由于您没有得到任何返回,可能您发送了错误的数据。客户端希望得到什么?另外,请注意,数组的最后一个元素缺少
    0x
    。这是故意的吗?我删除它。我不知道为什么serial没有收到任何东西???我不明白“发送错误数据”是什么意思??