如何用qt和c ++在.bin中编写二进制(而不是十六进制)?

时间:2018-03-14 16:29:15

标签: c++ qt file

我正在尝试编写二进制文档。到目前为止,我成功地编写了一个内容具有十六进制格式的.bin。我希望内容采用二进制格式(仅限0和1)。

有可能吗? 怎么做 ? 我的想法是错的,用十六进制或二进制表示它是一回事吗?

到目前为止,这是我的代码:)

#include <QApplication>
#include <QDataStream>
#include <QString>
#include <QFile>
#include <iostream>
#include <QDebug>
#include <QTextStream>
void createBinaryFile()
{
    int a = 22;

    QFile file("/home/.../facts.bin");
    if (!file.open(QIODevice::WriteOnly)) {
        std::cerr << "Cannot open file for writing: "
              << qPrintable(file.errorString()) << std::endl;
    return;
    }
    QDataStream out(&file);
    out.setVersion(QDataStream::Qt_4_3);
    out << quint32(0x12345678) << a;
    QTextStream writeInConsole(stdout);
    writeInConsole << a;

    file.flush();
    file.close();

}
void readBinaryFile()
{
    quint32 n;
    int a;
    QFile file("/home/.../facts.bin");
    if (!file.open(QIODevice::ReadOnly)) {
        std::cerr << "Cannot open file for reading: "
              << qPrintable(file.errorString()) << std::endl;
    return;
}

QDataStream in(&file);
in.setVersion(QDataStream::Qt_4_3);

in >> n >> a;
QTextStream okk(stdout);
okk << a;
}

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
createBinaryFile();
//readBinaryFile();

return app.exec();
}

这是facts.bin的内容: 1234 5678 0000 0016

非常感谢你的帮助! :)

1 个答案:

答案 0 :(得分:2)

这不是问题。二进制,八进制,十进制,十六进制等等 - 这只是相同数据的不同表示。

计算机是二进制的,因此存储在计算机上的所有数据都是二进制数据。

不要被默认/可取的方式欺骗​​二进制数据输出给人类,为了简洁起见,这通常是十六进制的,并且出于技术和历史原因。

计算机可以解决的最小问题是一个字节。除非明确打包数据,否则布尔值也会以字节形式存储,即使它们理论上只需要一个位。您无法真正读取或写入单个位,该操作将涉及读取或写入容器字节以及一些按位操作以提取或拼接所需位。

最后,请记住,数据通常实际上以二进制格式存储,而是作为“文本”,需要额外的解析才能被读取。在这种情况下,数字系统很重要,因为这会告诉计算机如何解释文本以将其转换为正确的二进制数据。这样它就知道101是5(bin),还是65(oct),101(dec)还是257(hex)。