Распознавание форматов файлов из двоичного кода (C++)

Я начинающий программист C++.

Я написал простую программу, которая создает массив символов (размер по выбору пользователя) и читает информацию, которая была в нем ранее. Часто вы можете найти что-то, что имеет смысл (я всегда нахожу алфавит?), Но в большинстве случаев это просто странные символы. Я сделал это вывод в двоичный файл.

Тем не менее, как я могу:

  1. Распознать разные порции данных

  2. Распознать, что такое чанки, какой формат файла (т. Е. Какой чанк это изображение, аудио, текст и т. Д.)

Мой код:

// 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 ответ

Решение

Некоторые форматы файлов начинаются с магических чисел, которые помогают их идентифицировать, хотя это не всегда так. В Википедии есть некоторые здесь: http://en.wikipedia.org/wiki/List_of_file_signatures. Команда unix 'file' пытается угадать форматы файлов на основе магических чисел в данных. Исходный код к этому наиболее вероятно доступен где-нибудь. (источники Apple Дарвин, если больше нигде).

Другие вопросы по тегам