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没有收到任何东西???我不明白“发送错误数据”是什么意思??