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

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

非常感谢您的帮助! :)

最佳答案

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

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

不要被二进制数据输出给人类的默认/首选方式所欺骗,为了简洁起见,以及出于技术和历史原因,二进制数据通常是十六进制的。

计算机可以寻址的最小事物是一个字节。除非您显式打包数据,否则 bool 值也存储为字节,即使理论上它们只需要一个位。您不能真正读取或写入单个位,该操作将涉及读取或写入容器字节以及一些按位操作以提取或拼接所需的位。

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

关于c++ - 如何使用 qt 和 c++ 在 .bin 中编写二进制(而不是十六进制)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49283046/

相关文章:

file - 如何读取特定行和特定位置?

Qt - 组合框处于事件状态时未触发按键事件

windows - 在Inno Setup中将我的QT应用程序与视频/图像文件相关联

c++ - bool 真值表 C++

c++ - 如何修复错误 "GLib-GIO-ERROR**: No GSettings schemas are installed on the system"?

c++ - 从多个 QThreads 更新 QProgressBar

ios - 在 WatchKit 应用中播放视频

perl - 无法使用 perl 创建文件(权限被拒绝)

C++ - 指向函数的全局指针

c++ - 在 C++ 的头文件和 Cpp 文件中使用类