Я использую некоторые функции для преобразования QVector's
в QByteArray's
, например:Как преобразовать QByteArray в строку в Qt 5.3?
QByteArray Serialize::serialize(QVector<double> data)
{
QByteArray byteArray;
QDataStream out(&byteArray, QIODevice::WriteOnly);
out << data;
return byteArray;
}
void Serialize::deserialize(QByteArray byteArray, QVector<double> *data)
{
QDataStream in(&byteArray, QIODevice::ReadOnly);
in >> *data;
}
Теперь, что у меня есть QByteArray
мне нужно поместить его в текстовый файл, как я могу преобразовать его в QString
?
Я уже попробовал самый простой способ:
QString myString(data); // data - QByteArray
Но myString
всегда пусто.
Я также нашел функцию toStdString()
в документации, но был введен только в Qt 5.4.
Я использую Qt 5.3.
Следит полный пример:
#include <QCoreApplication>
#include <QDebug>
#include <QVector>
#include <QByteArray>
#include <QDataStream>
QByteArray serialize(QVector<double> data)
{
QByteArray byteArray;
QDataStream out(&byteArray, QIODevice::WriteOnly);
out << data;
return byteArray;
}
void deserialize(QByteArray byteArray, QVector<double> *data)
{
QDataStream in(&byteArray, QIODevice::ReadOnly);
in >> *data;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QVector<double> data;
data << 1.1 << 2.2 << 3.3 << 4.4 << 5.5 << 6.6 << 7.7 << 8.8 << 9.9;
QByteArray byteArray = serialize(data);
QVector<double> dataConverted;
deserialize(byteArray, &dataConverted);
qDebug() << "Data:";
qDebug() << data;
qDebug() << "ByteArray:";
QString test(byteArray);
qDebug() << test;
qDebug() << "Data Converted:";
qDebug() << dataConverted;
return a.exec();
}
Примечание: Общая цель этого заключается в создании SQL файл со всем содержимым из базы данных SQLite. Мой двойной вектор преобразуется в QByteArray
и сохраняется как BLOB в базе данных (с использованием функции сериализации). Когда мне нужно загрузить его из базы данных, я использую функцию десериализации для преобразования в двойной вектор снова. Теперь мне нужно сгенерировать файл SQL с данными в формате BLOB, после чего я могу напрямую импортировать его в другую базу данных.
Большое спасибо за полное объяснение. Теперь я понял проблему, но я все еще не знаю, как ее напечатать. Вы знаете, как я могу напечатать массив байтов? Мне нужно сгенерировать ** SQL ** -файл с ** содержимым BLOB ** (сгенерированным 'QByteArray') из базы данных. – KelvinS
Возможно, я ошибаюсь, но не могли ли вы просто перевернуть вектор, распечатывая каждый элемент в строке? Очень простой пример: 'QString printVector (QVector * vector) { QString output; for (int index = 0; index < vector-> length(); index ++) { output + = QString :: number (vector-> at (index)) + ","; } return output; } ' –
Benp44
На самом деле, я не могу, потому что он просто вернет двойной вектор как ** QString ** (например,« 1.2.123.2.42.1 »). Мне нужно напечатать его в виде байтового массива в ** SQL **, потому что мне нужно будет импортировать его в другую базу данных. Например: «INSERT INTO myTable VALUES (14,« name », here_is_my_blob_type_saved_as_qbytearray);'. ** Примечание **: Я использую ** SQLite **. – KelvinS