Проблема
У меня есть интерфейс, который дает мне QVariant
произвольного типа. Мне нужно преобразовать содержимое данных в этом варианте в необработанный двоичный файл QByteArray
:
QVariant result = myQVariantReturningMethod(type arg, type arg2);
QByteArray rawResult = ?;
Задний план
Полученный QByteArray
отправляется по Canbus. В зависимости от размера передается в нескольких баночных рамах или в одной. Интерфейс шины CAN для отправки кадров принимает QByteArray
в качестве входных данных. Основываясь на дополнительной информации, получатель кадров банок знает, как анализировать входящий поток кадров банок.
Что я пробовал до сих пор
Я пробовал несколько подходов
- Использование
QDataStream
для получения данных в массиве. Однако сериализация работает непредсказуемым образом, когда я всегда получаю дополнительную информацию о самом типе в результирующем массиве, в зависимости от реализации операторов<</>>
для типа. - Использование
toString().toStdString()
изQVariant
приводит к приведенному значению, а не к фактическим необработанным двоичным данным, чего я не хочу. - Использование
toBytearryay()
приводит к тому же.
Меня не волнует, является ли возможным подходом к проблеме путь stl
или путь qt
. Однако он должен быть c++11
-совместимым.
QByteArray
? - person G.M.   schedule 20.01.2021QVariant
вQByteArray
. Лично я бы использовал методQDataStream
, который вы уже пробовали: кодировать вQByteArray
с помощьюQDataStream
на отправителе и декодировать изQByteArray
черезQDataStream
на получателе. - person G.M.   schedule 21.01.2021QVariant
, возвращенныйmyQVariantReturningMethod
на стороне отправителя, и записать его вQByteArray
на основе фактического типа, содержащегося в нем. - person G.M.   schedule 22.01.2021