c++ - (Qt C++) 将 QString 以二进制形式写入文件

标签 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

帮忙吗?

最佳答案

你应该在写之前转换它。

QByteArray array = QByteArray::fromHex(ye.toLatin1());
file.write(array);

你不需要使用QDataStream因为你已经有了QByteArray并且可以直接写它。

您可以读取数据并将其转换回十六进制表示形式,如下所示:

QString s = file.readAll().toHex();

关于c++ - (Qt C++) 将 QString 以二进制形式写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17602824/

相关文章:

c++ - 如何停止循环线程

c++ - 更改 QRegion 的几何形状

c - 如何一次一个字符地完整读取一个文件?

java - 如何读取文件,然后将每个文件整数分配给数组列表?

c++ - reinterpret_cast 到 QObject 的同级

c++ - 通过继承的类模板 SFINAE

c++ - 卡在一个 C++ 幸运七游戏程序上

c++ - 如何调整QSlider的句柄?

python - 如何永久设置 QListView 行高

c# - 无法删除 Windows 应用商店应用程序中的文件 - 访问被拒绝。 (HRESULT : 0x80070005 (E_ACCESSDENIED))