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



我正在尝试编写一个二进制文档。到目前为止,我成功地编写了一个内容具有十六进制格式的.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();
}

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

非常感谢您的帮助! :)

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

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

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

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

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

最新更新