我想将文件反编译成(/读为)原始二进制代码。我还没有找到任何关于它的东西。甚至可能吗?它必须是为了让计算机运行它,但某些操作系统可能不允许读取它。
编辑:让我们明确答案。我想从(例如)一个 .txt 文件开始,并以 0 和 1 的数组结束
我想将文件反编译成(/读为)原始二进制代码。我还没有找到任何关于它的东西。甚至可能吗?它必须是为了让计算机运行它,但某些操作系统可能不允许读取它。
编辑:让我们明确答案。我想从(例如)一个 .txt 文件开始,并以 0 和 1 的数组结束
存储在 Windows 和 Linux 等操作系统的文件系统上的文件不需要像您想象的那样“反编译”。它们已经存储为二进制数据。
剩下要做的就是简单地读取文件,但您需要使用正确的工具。
如果您使用流 I/O 之类的东西来使用流操纵器读取文件,则应考虑流操纵器用于格式化I/O。但是你不想要格式化的 I/O,你想要未格式化的 I/O。
考虑这个例子。如果您的文件c:\temp\test.txt
包含:
你好世界。
...并运行此代码:
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
ifstream f("c:\\temp\\test.txt", ios_base::binary|ios::in);
for( char c = 0; f.get(c); )
{
cout << c << "\t" << "0x" << hex << static_cast<int>(c) << endl;
}
}
你会看到输出是:
H 0x48
e 0x65
l 0x6c
l 0x6c
o 0x6f
, 0x2c
0x20
w 0x77
o 0x6f
r 0x72
l 0x6c
d 0x64
. 0x2e
0xd
0xa
十六进制数字和显示的字符是保存数据,只是格式不同。没有“反编译”步骤或类似的东西。此时剩下要做的就是将此数据存储在 a 之类的某个地方vector<char>
,并且可能重新格式化输出,以便它以二进制而不是十六进制或 ASCII 显示这些值。我将把它作为练习留给读者。