Originally Posted by
ChrisW67
Well, apart from fixing the broken assumption that everything fits into a string, you can serialise to binary any way that works and then base-64 or hex encode the binary blob to go through th string pathway.
Thanks Chris, I should have been looking at QByteArray closer. I got it working.
Full example in case anyone finds this by googling:
QList<QVariant> CreateData();
QString SerializeDataToB64String
(const QList<QVariant>
& listToSerialize
);
QList<QVariant> DeserializeB64String(const QString& serializedList);
int main(int argc, char *argv[])
{
QList<QVariant> dataToWrite = CreateData();
QString container
= SerializeDataToB64String
(dataToWrite
);
qDebug() << "b64 string container contents:" << container;
QList<QVariant> dataRead = DeserializeB64String(container);
Q_ASSERT(dataToWrite.size() == dataRead.size());
for (int i = 0; i < dataToWrite.size(); i++)
{
Q_ASSERT(dataToWrite[i] == dataRead[i]);
qDebug() << dataToWrite[i];
}
return 0;
}
QList<QVariant> CreateData()
{
QList<QVariant> vars;
vars.append("a string");
vars.append((qint32) 123);
vars.append(false);
return vars;
}
QString SerializeDataToB64String
(const QList<QVariant>
& listToSerialize
) {
out << listToSerialize;
writeBuffer.close();
qDebug() << "array size when written:" << byteArray.size();
return s;
}
QList<QVariant> DeserializeB64String(const QString& serializedList)
{
QList<QVariant> readVars;
in >> readVars;
qDebug() << "array size when read:" << readArr.size();
return readVars;
}
QList<QVariant> CreateData();
QString SerializeDataToB64String(const QList<QVariant>& listToSerialize);
QList<QVariant> DeserializeB64String(const QString& serializedList);
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QList<QVariant> dataToWrite = CreateData();
QString container = SerializeDataToB64String(dataToWrite);
qDebug() << "b64 string container contents:" << container;
QList<QVariant> dataRead = DeserializeB64String(container);
Q_ASSERT(dataToWrite.size() == dataRead.size());
for (int i = 0; i < dataToWrite.size(); i++)
{
Q_ASSERT(dataToWrite[i] == dataRead[i]);
qDebug() << dataToWrite[i];
}
return 0;
}
QList<QVariant> CreateData()
{
QList<QVariant> vars;
vars.append("a string");
vars.append((qint32) 123);
vars.append(false);
return vars;
}
QString SerializeDataToB64String(const QList<QVariant>& listToSerialize)
{
QByteArray byteArray;
QBuffer writeBuffer(&byteArray);
writeBuffer.open(QIODevice::WriteOnly);
QDataStream out(&writeBuffer);
out << listToSerialize;
writeBuffer.close();
QString s = QString(byteArray.toBase64());
qDebug() << "array size when written:" << byteArray.size();
return s;
}
QList<QVariant> DeserializeB64String(const QString& serializedList)
{
QByteArray readArr = QByteArray::fromBase64(serializedList.toAscii());
QBuffer readBuffer(&readArr);
readBuffer.open(QIODevice::ReadOnly);
QDataStream in(&readBuffer);
QList<QVariant> readVars;
in >> readVars;
qDebug() << "array size when read:" << readArr.size();
return readVars;
}
To copy to clipboard, switch view to plain text mode
Bookmarks