我正在研究一个项目,我需要编写(以及将来读取)一个字符串(QString)作为二进制文件。该字符串为HEX格式,如“00010203040506070a0f01”等......
我通过YouTube上的教程了解了这一点:
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();
}
但是当我用十六进制编辑器打开“myfile.dat”时,十六进制值不同,QString“ye”被写入文本方面。
00 00 00 0C 00 30 00 31 00 30 00 32 00 30 00 61
帮助?
答案 0 :(得分:7)
你应该在写作之前转换它。
QByteArray array = QByteArray::fromHex(ye.toLatin1());
file.write(array);
您不需要使用QDataStream
,因为您已经拥有QByteArray
并且可以直接编写它。
您可以按如下方式读取数据并将其转换回十六进制表示:
QString s = file.readAll().toHex();
答案 1 :(得分:0)
在QString中每个字符占用2个字节(使用unicode)。 您可以查阅ascii表以在hex int中搜索字符的代码值:
'0': 0x30
'1': 0x31
'a': 0x61
因此对于字符串"01020a"
,其ascii代码序列为:00 30 00 31 00 30 00 32 00 30 00 61
"00 00 00 0C":
我认为这是QString的类型标识。
抱歉我表达不好,希望它有用。
答案 2 :(得分:0)
将QString保存到QFile;
QString qStr="abc";
qFile.write(qStr.toUtf8().constData());
conversion sequences are here;
QString => QByteArray => const char* => QFile.write()
[ref class function]
QByteArray QString::toUtf8() const;
const char * QByteArray::constData() const;
qint64 QIODevice::write(const char * data);