簡體   English   中英

如何在Qt 5.3中將QByteArray轉換為字符串?

[英]How can I convert QByteArray to string in Qt 5.3?

我正在使用一些函數將QVector's轉換為QByteArray's ,例如:

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();
}

注意 :這樣做的總體目的是從SQLite數據庫生成包含所有內容的SQL文件。 我的雙重向量被轉換為QByteArray並作為BLOB存儲到數據庫中(使用序列化功能)。 當我需要從數據庫中加載它時,可以使用反序列化功能再次將其轉換為雙精度向量。 現在,我需要使用BLOB格式的數據生成SQL文件,然后可以將其直接導入到另一個數據庫中。

問題在於字節數組是與類型無關的數據類型,它只是表示內存中各個字節的集合。 在示例代碼中,您將從一個雙精度的向量創建字節數組,然后再轉換回另一個雙精度的向量。 沒問題。

但是,當您將字節數組傳遞給QString構造函數時,QString試圖將字節數組解釋為表示字符串的數據,例如ASCII字符代碼的數組。

某些字符串類可能會允許您執行此操作,並創建一個充滿垃圾的實例,但是QString似乎正在執行一些基本的錯誤檢查,並通過給您一個空字符串來幫助您。

至於一些打印出雙精度字節數組內容的代碼,您提供的反序列化方法也不是一個不好的例子。

使用QTextCodecQByteArray轉換為QString ,這是來自官方文檔的示例:

QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);

為了使示例工作,您需要在序列化期間將double轉換為QString

QByteArray serialize(QVector<double> data)
{
    QByteArray byteArray;
    QDataStream out(&byteArray, QIODevice::WriteOnly);
    for (double d : data) {
        out << QString::number(d);
    }
    return byteArray;
}

如果您不想將單個數字轉換為字符串,則還可以使用byteArray.toHex()QByteArray “字符串化”:

qDebug() << "ByteArray:";
QString test(byteArray.toHex());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM