web-dev-qa-db-ja.com

Qt C ++ QStringからQByteArrayへの変換

暗号化するとき、暗号化/復号化プログラムを作成しました。暗号化されたQByteArrayをテキストファイルに保存します。

復号化しようとすると、それを取得して復号化メソッドに入れますが、問題は、それをQByteArrayに変換する方法が必要なことです形式を変更せずに、そうしないと正しく復号化されません。つまり、ファイルが暗号化された値1234を提供し、1234.toLatin1()を実行してQByteArrayに変換した場合、値が変更され、復号化は機能しません。助言がありますか?

私のコード:

QFile file(filename);
    QString encrypted;
    QString content;

    if (file.open(QIODevice::ReadOnly)) {
        QTextStream stream( &file );
        content = stream.readAll();
    }

    encrypted = content.replace("\n", "");

    qDebug() << encrypted; // Returns correct encrypted value

    QByteArray a;
    a += encrypted;

    qDebug() << "2 " + a; // Returns different value than previous qDebug()

    QByteArray decrypted = crypto.Decrypt(a, key);
    return decrypted;
20
James

私はあなたが使うべきだと思います:

QString::fromUtf8(const QByteArray &str)

または:

QString::QString(const QByteArray &ba)

qByteArrayをQStringに変換し、QTextStreamによってファイルに書き込みます。
その後、QTextStreamでファイルを読み取り、次を使用します。

QString::toUtf8()

qStringをQByteArrayに変換します。

QString :: QString(const QByteArray&ba)

バイト配列baで初期化された文字列を構築します。指定されたバイト配列はUnicodeに変換されますfromUtf8()を使用


PS:おそらくQFile :: writeを使用し、QFile :: readがより良い方法です。

30
Daniel

toLocal8Bit()を使用してみてください。

4
Ahmed Yossef

または、単にb64 = data.toUtf8().toBase64();を使用します

最初にtoUtf8()QByteArrayに変換してから、すぐにtoBase64()に変換します

0
Skonitsa