如何将任意类型的QVariant中的原始二进制内容获取到QBytearray中



问题

我有一个接口,它给了我一个任意类型的QVariant。我需要将此变体中的数据内容转换为原始二进制QByteArray:

QVariant result = myQVariantReturningMethod(type arg, type arg2);
QByteArray rawResult = ?;

背景

生成的QByteArray通过Canbus发送。根据其大小,它可以在多个can帧或单个can帧中传输。用于发送帧的can总线接口采用QByteArray作为输入。基于附加信息,can帧的接收器知道如何解析can帧的传入流。

到目前为止我尝试了什么

我尝试了几种方法

  • 使用QDataStream将数据获取到数组中。然而,序列化的工作方式是不可预测的,根据类型的<</>>运算符的实现,我总是在生成的数组中获得有关类型本身的附加信息
  • 使用QVarianttoString().toStdString(),得到一个广播值,而不是实际的二进制原始数据,这不是我想要的
  • 使用toBytearryay(),结果相同

我不在乎stl方式还是qt方式是解决这个问题的可能方法。然而,它必须是兼容c++11

事实证明,QVariant有一个未记录的方法constData(),它给出了我想要的结果:指向QVariant内部存储数据的指针。与QMetaType::sizeOf()一起,这正是将所有数据写入QByteArray所需要的。

我在Qt 6.0的文档中发现了这种方法,并发现它也适用于我的Qt 5.12.7,尽管在相应的文档中没有描述。

最新更新