C++ (Qt C+;+;)将QString作为二进制文件写入文件
我正在做一个项目,我需要将一个字符串(QString)写为二进制。字符串为十六进制格式,如“00010203040506070a0f01”等 我是通过YouTube上的一个教程了解到这一点的:C++ (Qt C+;+;)将QString作为二进制文件写入文件,c++,qt,file-io,binary,hex,C++,Qt,File Io,Binary,Hex,我正在做一个项目,我需要将一个字符串(QString)写为二进制。字符串为十六进制格式,如“00010203040506070a0f01”等 我是通过YouTube上的一个教程了解到这一点的: void Output() { QString ye("01020a"); QFile file("C:\\Users\\Public\\Documents\\Qt_Projects\\myfile.dat"; if(!file.open(QIODevice::WriteOnly
void Output()
{
QString ye("01020a");
QFile file("C:\\Users\\Public\\Documents\\Qt_Projects\\myfile.dat";
if(!file.open(QIODevice::WriteOnly))
{
qDebug() << "Could not open file to be written";
return;
}
QDataStream out(&file);
out.setVersion(QDataStream::Qt_5_0);
out << ye;
file.flush();
file.close();
}
帮助?您应该在写之前转换它
QByteArray array = QByteArray::fromHex(ye.toLatin1());
file.write(array);
您不需要使用QDataStream
,因为您已经拥有QByteArray
,并且可以直接编写它
您可以读取数据并将其转换回十六进制表示形式,如下所示:
QString s = file.readAll().toHex();
在QString中,每个字符占用2个字节(使用unicode)。 您可以参考ascii表以十六进制整数搜索字符的代码值:
'0': 0x30
'1': 0x31
'a': 0x61
因此,对于字符串“01020a”
来说,其ascii码序列是:00330030030061
“000c”:
我认为这是QString的类型标识
对不起,我的表达不好,希望有用。将QString保存到QFile
QString qStr="abc";
qFile.write(qStr.toUtf8().constData());
conversion sequences are here;
QString => QByteArray => const char* => QFile.write()
[参考类函数]
QByteArray QString::toUtf8() const;
const char * QByteArray::constData() const;
qint64 QIODevice::write(const char * data);
工作很有魅力:)Thx我需要等待4分钟才能接受只是想知道,我该如何将文件读取到QString?我假设这是一个变体,但我遗漏了什么?你的意思是把它转换回十六进制表示吗
QString s=file.readAll().toHex()代码>也许,打印字符串的最简单方法是什么?我对qt很陌生。我搞砸了qDebug,但我不知道它在哪里显示它工作:)我提供了应用程序输出,一切都很完美!
QByteArray QString::toUtf8() const;
const char * QByteArray::constData() const;
qint64 QIODevice::write(const char * data);