Преобразование двоичного файла в читаемый текстовый файл в C Linux - PullRequest
0 голосов
/ 30 марта 2019

Мне дали двоичный файл, который мне нужно преобразовать в читаемый текстовый файл, используя C и Linux.Приведенный ниже код был частично взят с этого сайта.

Я пробовал несколько алгоритмов, которые нашел, но ни один из них не работает.

unsigned char buffer[1000];
FILE *input;
FILE *output;
int n = 0;
int count = 0;

input = fopen("memdb","rb");
output = fopen("output.out","wb");

while(!feof(input))
{
    n = fread(buffer,1,1000,input);

    count += n;

    fwrite(buffer,1,n,output);
}

fclose(input);
fclose(output);

1 Ответ

0 голосов
/ 30 марта 2019

Ваш код выполняет точную копию двоичного содержимого от memdb до output.out .Нет преобразования в читаемый текст вообще.Обратите внимание, что while(!feof(input)) не является правильным способом проверки конца файла, но в вашем конкретном случае это не представляет проблемы.

Ваша цель неясна:

  • чтоВы подразумеваете под читаемый текстовый файл ?
  • , какие данные содержит memdb ?
  • Вы хотите преобразовать данные не ASCII в некоторыеальтернативная форма, которая более читаема человеком?

Вот альтернатива, которая производит шестнадцатеричный дамп:

/* copy binary file memdb as hex, returns the number of bytes or negative for error */
int copy_memdb(void) {
    FILE *input;
    FILE *output;
    int c, count;

    input = fopen("memdb", "rb");
    if (input == NULL) {
        return -1;
    }
    output = fopen("output.out", "w");
    if (output == NULL) {
        fclose(input);
        return -2;
    }
    count = 0;
    while ((c = getc(input)) != EOF) {
        if (count++ % 16 == 0) {
            putc('\n', output);
        } else {
            putc(' ', output);
        }
        fprintf(%02X", c);
    }
    if (count > 0)
        putc('\n', output);

    fclose(input);
    fclose(output);
    return count;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...