(Qt C ++)将QString写为二进制文件

时间:2013-07-11 20:26:08

标签: c++ qt file-io binary hex

我正在研究一个项目,我需要编写(以及将来读取)一个字符串(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

帮助?

3 个答案:

答案 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);