web-dev-qa-db-fra.com

Conversion Qt C ++ QString en QByteArray

J'ai créé un programme de chiffrement/déchiffrement. Lors du chiffrement, je stocke le QByteArray chiffré dans un fichier texte.

En essayant de décrypter, je l'ai récupéré et ensuite mis dans la méthode de décryptage, le problème est que j'ai besoin d'un moyen de le convertir en QByteArray sans changer le format, sinon il ne sera pas décrypté correctement. Ce que je veux dire, c’est que si le fichier m’a donné une valeur chiffrée de 1234 et que j’ai converti cela en QByteArray en allant à 1234.toLatin1(), la valeur est modifiée et le déchiffrement ne fonctionne pas. Aucune suggestion?

Mon code:

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

Je suppose que vous devriez utiliser:

QString::fromUtf8(const QByteArray &str)

Ou:

QString::QString(const QByteArray &ba)

convertir QByteArray en QString, puis enregistrez-le dans un fichier avec QTextStream.
Après cela, lisez le fichier par QTextStream, utilisez:

QString::toUtf8()

convertir QString en QByteArray.

QString :: QString (const QByteArray & ba)

Construit une chaîne initialisée avec le tableau d'octets ba. Le tableau d'octets donné est converti en Unicode en utilisant fromUtf8 ().


P.S: Peut-être utiliser QFile :: write et QFile :: read est un meilleur moyen.

30
Daniel

essayez d'utiliser toLocal8Bit () .. ça marche très bien avec moi

4
Ahmed Yossef

Ou tout simplement aller avec b64 = data.toUtf8().toBase64();

Convertissez-le d'abord en QByteArray avec le toUtf8() puis convertissez-le immédiatement en toBase64()

0
Skonitsa