QT读取二进制文件,然后将其转换为QString

Posted

技术标签:

【中文标题】QT读取二进制文件,然后将其转换为QString【英文标题】:QT Reading binary file and then convert it to QString 【发布时间】:2014-10-01 15:39:45 【问题描述】:

我将 QString 保存在这样的文件中:

QString str="blabla";
QByteArray _forWrite=QByteArray::fromHex(str.toLatin1());
f.write(_forWrite); // f is the file that is opened for writing.

然后,当我读取文件时,我使用 QFile::readAll() 获取 QByteArray,但我不知道如何将其转换为 QString。

我尝试使用使用 QByteArray 的构造函数,但没有成功。我也尝试了 QByteArray::data() 但结果相同。我做错了什么?

【问题讨论】:

“没有成功”是什么意思?编译错误?运行时错误?运行时正常但数据乱码? 你为什么在一个非十六进制的字符串上使用fromHex? :-/ 那是无效的输入并且没有被检查,所以它不会按照你的想法去做。 【参考方案1】:

根本不清楚您为什么要调用 QByteArray::fromHex。 toLatin1() 已经返回 QByteArray,其中每个符号用一个字节编码。

[更新]

你根本不应该打电话给QByteArray::fromHex,因为:

跳过输入中的无效字符

无效字符是不是the numbers 0-9 and the letters a-f的字符

【讨论】:

字符串肯定是blabla,带有小写L,如“blah blah”,而不是“b one a b one a”。不应该用它作为输入来调用“fromHex”。所以这里肯定有误会。 是的,我刚刚更新了答案,说明为什么调用 toHex() 不起作用。 是的,就是这样。我曾经使用 toHex,因为我看到一个使用它的示例并没有意识到 toLatin1() 返回 QByteArray。谢谢!【参考方案2】:

你可以使用QDataStream

#include <QApplication>

#include <QDataStream>
#include <QByteArray>
#include <QFile>

int main(int argc, char *argv[])

    QApplication app(argc, argv);

        QString strToWrite = "blabla";
        QFile fileToWrite("file.bin");
        QDataStream dataStreamWriter(&fileToWrite);
        fileToWrite.open(QIODevice::WriteOnly);
        dataStreamWriter << strToWrite;
        fileToWrite.close();

        QString strToRead = "";
        QFile fileToRead("file.bin");
        QDataStream dataStreamReader(&fileToRead);
        fileToRead.open(QIODevice::ReadOnly);
        dataStreamReader >> strToRead;
        fileToRead.close();

        qDebug() << strToRead;

    return app.exec();

输出:“blabla”

【讨论】:

谢谢,但我想要没有 QDataStream :) QString s = "blabla"; QByteArray ba = s.toUtf8(); QString s2 = QString::fromUtf8(ba);或 QByteArray ba = s.toLatin1(); QString s2 = QString::fromLatin1(ba);取决于您将使用的字符集。

以上是关于QT读取二进制文件,然后将其转换为QString的主要内容,如果未能解决你的问题,请参考以下文章

Qt中int转换为QString的方法

QT+PCL 读取文件乱码问题

Qt中将Qstring的内容输出为16进制

Qt QString转char*

用Qt做一个读取视频文件并显示出来的工具

将 std::string 转换为 QString