Qt C++ QString 到 QByteArray 的转换

Qt C++ QString to QByteArray Conversion

我创建了一个 encrypt/decrypt 程序,在加密时我将加密的 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;

如果我没理解错的话,文件中的文本存储在 QString 内容中。我想你可以创建一个新的 QByteArray。因为 QByteArray 的构造函数不允许 QString 作为输入,所以我可能不得不将 QString 附加到空的 QByteArray。

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

我在 Qt 库方面经验不多,但希望对您有所帮助。

我猜你应该使用:

QString::fromUtf8(const QByteArray &str)

或者:

QString::QString(const QByteArray &ba)

将QByteArray转换为QString,然后通过QTextStream写入文件。
之后,通过QTextStream读取文件,使用:

QString::toUtf8()

将 QString 转换为 QByteArray。

QString::QString(const QByteArray &ba)

Constructs a string initialized with the byte array ba. The given byte array is converted to Unicode using fromUtf8().


P.S: 也许使用 QFile::write 和 QFile::read 是更好的方法。

尝试使用 toUtf8() ..对我来说效果很好

或者直接使用 b64 = data.toUtf8().toBase64();

首先用toUtf8()将其转换为QByteArray,然后立即将其转换为toBase64()

有一个简单的方法:

   QByteArray ba;
   QString qs = "String";
   ba += qs;

更难的方法:

QByteArray ba;
QDataStream in(&ba, QIODevice::WriteOnly);
in << QString("String");

极端方式,给想用QBuffer的人:

#include <QDebug>
#include <QBuffer>
#include <QDataStream>
#include <QIODevice>
#include <QByteArray>
#include <QString>
#include <qcoreapplication.h>

int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   QByteArray byteArray;
   QBuffer buffer(&byteArray);
   buffer.open(QIODevice::ReadWrite);
   QDataStream in( &buffer );
   in << QString("String");
   buffer.close();

   for (int i = 0; i < byteArray.length(); ++i) {
      printf("%c - %x\n", byteArray.at(i), byteArray.at(i));
   }

   printf("\n");
   

return a.exec();
}

谁运行最后的代码可以问我null byte是从哪里来的?

QDataStreamQString 序列化为小端。读取 4 个字节以创建 32 位长度值,后跟 UTF-16 格式的字符串本身。此字符串在 UTF-16 中的长度为 12 个字节,因此 QByteArray 中的前三个字节将为零。

QByteArray中的qDebug ()经常出问题录音没问题。 不要忘记删除 .pro 文件中的 QT_NO_CAST_FROM_BYTEARRAY,如果它有