Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此代码是否以正确的方式在Qt C+中发送十六进制数据+;?_Qt_Hex_Port_Qbytearray - Fatal编程技术网

此代码是否以正确的方式在Qt C+中发送十六进制数据+;?

此代码是否以正确的方式在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

我是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]=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
    字段似乎是某种校验和。您需要根据数据包的内容进行计算。协议文档应该指出它是否跨越整个数据包,以及如何计算值

  • 您似乎正在与指纹识别模块(如FPM-1502、SM-12、ADST11SD300/310或类似模块)通话。如果是这样,那么您可以获得如下有效命令包:

    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“某些设备”是指形打印机。文档是免费的。我已经弄明白了,但那是不必要的。请编辑问题,将指向指纹识别模块文档的链接包括在内。