Подтвердить что ты не робот

Qt С++ QString для преобразования QByteArray

Я создал программу шифрования/дешифрования, при шифровании я храню зашифрованный массив QByteArray в текстовом файле.

При попытке расшифровки я получил его и затем поместил в метод дешифрования, проблема в том, что мне нужен способ конвертировать его в QByteArray без изменения формата, иначе он не будет правильно расшифрован. Я имею в виду, что если файл дал мне зашифрованное значение 1234, и я преобразовал его в QByteArray, перейдя 1234.toLatin1(), он изменит значение, и расшифровка не будет работать. Есть предложения?

Мой код:

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;
4b9b3361

Ответ 1

Я думаю, вы должны использовать:

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().


P.S: Может быть, лучше использовать QFile :: write и QFile :: read.

Ответ 2

попробуйте использовать toLocal8Bit().. он отлично работает со мной

Ответ 3

Или просто воспользуйтесь b64 = data.toUtf8().toBase64();

Сначала преобразуйте его в QByteArray с помощью toUtf8(), а затем немедленно преобразуйте его в toBase64()

Ответ 4

Если я правильно понял, текст из файла хранится в содержимом QString. Я думаю, вы можете создать новый QByteArray. Поскольку конструктор QByteArray не позволяет вводить QString, мне, вероятно, придется добавить QString в пустой QByteArray.

//After if:  
QByteArray tempContent();
tempContent.append(content);
QByteArray decrypted = crypto.Decrypt(tempContent, key);

У меня нет большого опыта в библиотеке Qt, но я надеюсь, что это поможет.