如何从任意类型的 QVariant 中获取原始二进制内容到 QBytearray 中?
How can I get the raw binary content from an arbitrary typed QVariant into a QBytearray?
问题
我有一个接口,可以为我提供任意类型的 QVariant
。我需要将此变体中的数据内容转换为原始二进制 QByteArray
:
QVariant result = myQVariantReturningMethod(type arg, type arg2);
QByteArray rawResult = ?;
背景
生成的 QByteArray
通过 Canbus 发送。根据其大小,它以多个 can 帧或单个 can 帧传输。用于发送帧的 can 总线接口将 QByteArray
作为输入。基于附加信息,can 帧的接收者知道如何解析传入的 can 帧流。
到目前为止我尝试了什么
我尝试了几种方法
- 使用
QDataStream
获取数据到数组中。然而,序列化以一种不可预测的方式工作,我总是在结果数组中获得关于类型本身的额外信息,这取决于类型的 <</>>
运算符的实现。
- 使用
QVariant
的 toString().toStdString()
,得到一个转换值,而不是实际的二进制原始数据,这不是我想要的。
- 使用
toBytearryay()
,结果相同。
我不关心 stl
方式还是 qt
方式是解决问题的可能方法。但是,它必须 c++11
-compatible
事实证明,QVariant
有一个未记录的方法 constData()
,它给出了我想要的结果:指向 QVariant
内部存储数据的指针。与 QMetaType::sizeOf()
一起,这正是将所有数据写入 QByteArray
.
所需要的
我发现该方法记录在 Qt 6.0
的文档中,并且发现它也适用于我的 Qt 5.12.7
,尽管相应的文档中没有描述。
问题
我有一个接口,可以为我提供任意类型的 QVariant
。我需要将此变体中的数据内容转换为原始二进制 QByteArray
:
QVariant result = myQVariantReturningMethod(type arg, type arg2);
QByteArray rawResult = ?;
背景
生成的 QByteArray
通过 Canbus 发送。根据其大小,它以多个 can 帧或单个 can 帧传输。用于发送帧的 can 总线接口将 QByteArray
作为输入。基于附加信息,can 帧的接收者知道如何解析传入的 can 帧流。
到目前为止我尝试了什么
我尝试了几种方法
- 使用
QDataStream
获取数据到数组中。然而,序列化以一种不可预测的方式工作,我总是在结果数组中获得关于类型本身的额外信息,这取决于类型的<</>>
运算符的实现。 - 使用
QVariant
的toString().toStdString()
,得到一个转换值,而不是实际的二进制原始数据,这不是我想要的。 - 使用
toBytearryay()
,结果相同。
我不关心 stl
方式还是 qt
方式是解决问题的可能方法。但是,它必须 c++11
-compatible
事实证明,QVariant
有一个未记录的方法 constData()
,它给出了我想要的结果:指向 QVariant
内部存储数据的指针。与 QMetaType::sizeOf()
一起,这正是将所有数据写入 QByteArray
.
我发现该方法记录在 Qt 6.0
的文档中,并且发现它也适用于我的 Qt 5.12.7
,尽管相应的文档中没有描述。