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;

原文由 James 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 606
2 个回答

我想你应该使用:

 QString::fromUtf8(const QByteArray &str)

或者:

 QString::QString(const QByteArray &ba)

将 QByteArray 转换为 QString,然后通过 QTextStream 将其写入文件。

之后,通过 QTextStream 读取文件,使用:

 QString::toUtf8()

将 QString 转换为 QByteArray。

QString::QString(const QByteArray &ba)

构造一个用字节数组 ba 初始化的字符串。 使用 fromUtf8() 将给定的字节数组转换为 Unicode。

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

原文由 Daniel 发布,翻译遵循 CC BY-SA 3.0 许可协议

有一个简单的方法:

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

运行最后一个代码的人可以问我空字节是从哪里来的?

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

读取 QByteArray 中的 qDebug () 经常出现问题 录音很好。不要忘记删除 QT_NO_CAST_FROM_BYTEARRAY 在您的 .pro 文件中,如果它有

原文由 Andrew 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题