此代码是否以正确的方式在Qt C+中发送十六进制数据+;?
我是Qt的新手。我正在用文档制作指纹图。我想以以下格式将数据发送到串行端口:此代码是否以正确的方式在Qt C+中发送十六进制数据+;?,qt,hex,port,qbytearray,Qt,Hex,Port,Qbytearray,我是Qt的新手。我正在用文档制作指纹图。我想以以下格式将数据发送到串行端口: 我用这种格式编写了代码,但我认为我的数据有误,因为这种代码会在某些设备上点亮LED: QByteArray ba; ba.resize(24); ba[0]=0x55; ba[1]=0xAA; ba[2]=0x24; ba[3]=0x01; ba[4]=0x01; ba[5]=0x00; ba[6]=0x00; ba[7]=0x00; ba[8]=0x00; ba[9]=0x00; ba[10]=0x00; ba[11
我用这种格式编写了代码,但我认为我的数据有误,因为这种代码会在某些设备上点亮LED:
QByteArray ba;
ba.resize(24);
ba[0]=0x55;
ba[1]=0xAA;
ba[2]=0x24;
ba[3]=0x01;
ba[4]=0x01;
ba[5]=0x00;
ba[6]=0x00;
ba[7]=0x00;
ba[8]=0x00;
ba[9]=0x00;
ba[10]=0x00;
ba[11]=0x00;
ba[12]=0x00;
ba[13]=0x00;
ba[14]=0x00;
ba[15]=0x00;
ba[16]=0x00;
ba[17]=0x00;
ba[18]=0x00;
ba[19]=0x00;
ba[20]=0x00;
ba[21]=0x00;
ba[22]=0x27;
ba[23]=0x01;
p->writedata(ba);
此数据正确吗?您只是将图形复制到代码中。如果不理解这幅画的意思,它是行不通的。你似乎错过了:
LEN
字段似乎是一个小的endian整数,它给出了数据
字段中的字节数-如果数据包大小固定,可能是携带有用信息的字节数CKS
字段似乎是某种校验和。您需要根据数据包的内容进行计算。协议文档应该指出它是否跨越整个数据包,以及如何计算值QByteArray cmdPacket(quint16 cmd, const char *data, int size) {
Q_ASSERT(size <= 16);
QByteArray result(24, '\0');
QDataStream s(&result, QIODevice::WriteOnly);
s.setByteOrder(QDataStream::LittleEndian);
s << quint16(0xAA55) << cmd << quint16(size);
s.writeRawData(data, size);
s.skipRawData(22 - s.device()->pos());
quint16 sum = 0;
for (int i = 0; i < 22; ++i)
sum += result[i];
s << sum;
qDebug() << result.toHex();
return result;
}
QByteArray cmdPacket(quint16 cmd, const QByteArray& data) {
return cmdPacket(cmd, data.data(), data.size());
}
QByteArray cmdSensorLed(bool on) {
char data[2] = {'\0', '\0'};
if (on) data[0] = 1;
return cmdPacket(0x124, data, sizeof(data));
}
显示更多代码。调试。做出更精确的错误描述。您甚至没有提供足够的信息来理解协议。您应该自己花更多的精力来查找问题。@Silicomancer:我只想用qbytearray将数据通过串行端口发送到linux设备。@KubaOber“某些设备”是指形打印机。文档是免费的。我已经弄明白了,但那是不必要的。请编辑问题,将指向指纹识别模块文档的链接包括在内。