我正在尝试编写一个二进制文件。到目前为止,我成功地编写了一个 .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/