我是初学者C ++程序员。
我编写了一个简单的程序,它创建了一个char数组(大小是用户的选择)并读取其中的先前信息。通常你可以找到有意义的东西(我总能找到字母表?)但大多数只是奇怪的字符。我把它输出成二进制文件。
但是,我如何:
识别不同的数据块
识别哪些块是什么文件格式(即什么块是图像,音频,文本等)
我的代码:
// main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
int memory_size = 4000;
string data = "";
bool inFile = false;
cout << "How many bytes do you want to retrieve? (-1 to exit)\n";
cin >> memory_size;
string y_n;
cout << "Would you like to write output into a file? (Y/N)\n";
cin >> y_n;
if (y_n.compare("Y") == 0 || y_n.compare("y") == 0)
inFile = true;
else
inFile = false;
char memory_chunk[memory_size];
for (int i=0;i<memory_size;i++) {
cout << memory_chunk[i] << "";
data += memory_chunk[i] + "";
}
if (inFile) {
ofstream file("output.binary", ios::out | ios::binary);
file.write(memory_chunk, sizeof memory_chunk);
file.close();
}
cin >> data;
return 0;
}
检索数据的示例:(这比通常可以检索的数量小很多)
dû( L) àýtú( ¯1Œw ÐýDú( @ú( Lú( dû( ¼û( L) º
‰v8û( 7Œw û( ú( 0ý( k7Œwdû( @ 5 À ü( ¨›w ó˜wÞ¯ › Ø› 0ý( Hû( À › `› À Dû( LŒw › @› `› › lû( ÷Œw › › ˜› › û( 3YŒw › ~Œw › €› › à› Dü( › €› Dü( ßWŒwXŒwDÞ¯ › › €› ˆ› À › ¦› › !› : À › `› À ü( › ˆ› V €›
Œw ˆ› ¬û( Äÿ( ‘Q‡w€ôçþÿÿÿXŒwµTŒw ‚› xü( È6‹w › À×F fÍñt"ãŠvEA @ÒF ¸ü(
þÿÿÿ@ÒF Ã~“v Øü( O¯‰vØÞ¯øü( œ›‰v › ˆý( ‡ÌE @ÒF
8|“v ý( ‰v@M“v,ý( wî‰v hý( ¬_‘v8|“v˜_‘vݧY‘ ÀwF
<ý( Äÿ( e‹vàçþÿÿÿ˜_‘v"A
8|“v@ÒF ÀwF ïÀE ÕF ”› ÓºA ”› ÕF lF €F F 2 àýàý( ð @
答案 0 :(得分:2)
某些文件格式以有助于识别它们的幻数开头,但情况并非总是如此。维基百科有一些在这里: http://en.wikipedia.org/wiki/List_of_file_signatures。 unix命令&#39;文件&#39;试图根据数据中的幻数猜测文件格式。它的源代码很可能在某处可用。 (苹果达尔文来源,如果没有其他地方)。