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的主要内容,如果未能解决你的问题,请参考以下文章