从二进制(C ++)识别文件格式

时间:2015-06-05 00:51:58

标签: c++11 ram file-format

我是初学者C ++程序员。

我编写了一个简单的程序,它创建了一个char数组(大小是用户的选择)并读取其中的先前信息。通常你可以找到有意义的东西(我总能找到字母表?)但大多数只是奇怪的字符。我把它输出成二进制文件。

但是,我如何:

  1. 识别不同的数据块

  2. 识别哪些块是什么文件格式(即什么块是图像,音频,文本等)

  3. 我的代码:

    // 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    àýàý( ð      @ 
    

1 个答案:

答案 0 :(得分:2)

某些文件格式以有助于识别它们的幻数开头,但情况并非总是如此。维基百科有一些在这里: http://en.wikipedia.org/wiki/List_of_file_signatures。 unix命令&#39;文件&#39;试图根据数据中的幻数猜测文件格式。它的源代码很可能在某处可用。 (苹果达尔文来源,如果没有其他地方)。