Есть ли хорошая команда Unix для выгрузки текстового представления двоичного файла? - PullRequest
2 голосов
/ 30 марта 2010

Я получил несколько двоичных файлов, содержащих целые числа. Есть ли какая-нибудь приятная команда Unix, которая позволит мне выводить ее на терминал без информации о смещении и т. Д .?

Что-то вроде:

double int[4];
while (fread(tmp, sizeof(int), 4, stdin))
    for(int i = 0; i < 4; i++)
        printf("%d\t",tmp[i]);

Кажется, что hexdump и od дают мне необходимую информацию, но вывод слишком многословный. Я просто хочу содержимое.

Ответы [ 5 ]

7 голосов
/ 30 марта 2010

Чтобы решить эту проблему, используя стандартные инструменты Unix, вы обычно объединяете в кучу:

od -v -t d4 ~/.profile | awk '{$1 = ""; print}' | fmt -1 | sed 's/^ *//'

od печатает каждое 32-битное слово в десятичном виде с предшествующими смещениями.Комментарий awk удаляет смещения.Команда fmt выдает одно целое число на строку.Команда sed удаляет начальные пробелы из результата.

6 голосов
/ 30 марта 2010

Попробуйте следующее hexdump(1) заклинание:

hexdump -v -e '4/4 "%d\t"' file

-v принудительная распечатка всего файла (нет * для повторяющихся строк),
-e принимает строку формата '4/4 "%d\t"', которая указывает hexdump(1) выполнить четыре итерации, печатая четыре байта на каждой итерации с заданной printf -подобной маской.

2 голосов
/ 30 марта 2010

Разве od - имя файла не дает вам данных без смещения?

1 голос
/ 30 марта 2010

Вы можете воспроизвести почти точно ваш желаемый ввод и вывод с помощью Perl. Буквально не существует файлов для чтения или записи, которые нельзя выполнить, проще всего, чем в C.

Функция «sysread» больше всего похожа на «fread» C.

Вы можете указать дескриптор файла, автоматический буфер, байты для чтения и смещение в файл. А в Perl открытие и закрытие файла происходит в большинстве случаев автоматически.

Вы не указали достаточно информации, чтобы написать пример, но эта ссылка должна помочь вам начать:

Кулинарная книга Ch 8

Или просто Google 'Perl sysread'

То, что вы хотите, возможно, может быть выполнено в строковой программе Perl 1.

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

строк кажется, что вы ищете:

$ strings file

Он выведет все строки, содержащиеся в двоичном файле. Это все еще немного многословно для большого файла, но это по крайней мере читабельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...