我想将文件反编译成(/读取它们)原始二进制代码。我还没发现任何相关信息。它甚至可能吗?它必须是为了让计算机运行它,但某些操作系统可能不允许它读取它。
编辑:让我们澄清答案。我想从(例如).txt文件开始,以0和1的数组结束
答案 0 :(得分:2)
存储在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
十六进制数字和显示的字符是保存数据,格式不同。没有“反编译”步骤或类似的东西。此时剩下要做的就是将这些数据存储在某个地方,如vector<char>
,并且可能重新格式化输出,以便它以二进制而不是十六进制或ASCII显示这些值。我将把它作为练习留给读者。