Можно ли отменить xxd, чтобы получить оригинальный файл из двоичного файла

5673
arvindh

я использовал xxdдля создания шестнадцатеричного представления файла (любой файл, например .jpg, .docx, .zip и т. д.), как это, ..

$ xxd -p original_file.zip > hexa_format.txt 

и повернуть вспять

$ xxd -r -p hexa_format.txt > original_file.zip 

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

$ xxd -p -b original_file.zip > binary_format.txt 

мой вопрос,
как я могу вернуть его обратно в исходный файл из двоичного файла (binary_format.txt), созданного из приведенной выше команды. Страница man xxd говорит, что это невозможно сделать (в последней строке).

-b | -bits Switch to bits (binary digits) dump, rather than hexdump. This option writes octets as eight digits "1"s and "0"s instead of a normal hexadecimal dump. Each line is preceded by a line number in hexadecimal and followed by an ascii (or ebcdic) representa‐ tion. The command line switches -r, -p, -i do not work with this mode. 

Если это не может быть сделано, есть ли другая команда, которая может это сделать. как обводить несколько комадов так.

2
`xxd` не выводит двоичные файлы. Он выводит текстовые представления файлов. Пожалуйста, прочитайте страницу руководства. Упомянутый выше двоичный формат - это просто байты файла, записанные в 1 и 0. Allen 9 лет назад 0

2 ответа на вопрос

0
Romeo Ninov

You alter the structure of the file do you can't easy do this. Maybe something like this can help (but you will loose newline characters:

awk '' binary_format.txt >out_file 
терминал возвращает следующее: `awk: ошибка времени выполнения: недостаточно аргументов, переданных в printf (" ...% & '") FILENAME =" bin_jpg.txt "FNR = 59 NR = 59. Мое использование более или менее похоже на восстановление исходного файла, arvindh 9 лет назад 0
попробуйте выполнить его следующим образом: awk '' binary_format.txt> out_file Romeo Ninov 9 лет назад 0
теперь ошибка: `awk: ошибка времени выполнения: недостаточно аргументов, переданных в printf ("% s ...... ") FILENAME =" bin_jpg.txt "FNR = 1 NR = 1`. arvindh 9 лет назад 0
'' И обновите вашу версию awk, кажется, она очень старая Romeo Ninov 9 лет назад 0
Почему вас заинтересовало только восьмое поле? Allen 9 лет назад 0
@ Аллен, пожалуйста, проверьте, как выглядит формат (двоичный). Исходный контент находится в поле 8. Остальное - счетчик и двоичные строки. Romeo Ninov 9 лет назад 0
@Р. Нинов: Неправильно. Это текстовое представление, которое не один к одному. Он использует точку «.» Для всего, что не имеет печатного символа ASCII. Allen 9 лет назад 0
@ Аллен, не проверял, просто протестируй с помощью файла ascii Romeo Ninov 9 лет назад 0
@ Аллен, я полагаю, что вы вставили 2 разных файла в другую программу (я знаю, это звучит неубедительно). Эта конкретная программа принимает только двоичное представление / формат любого файла (она не принимает .jpg, .zip и т. Д.), Который был задан в качестве входных данных. Вот почему мне нужно преобразовать их в двоичный файл. Я не эксперт, но так как я столкнулся с этим `xxd`, который может получить двоичный формат файла, я выбрал этот путь. arvindh 9 лет назад 0
В Unix файл - это просто поток байтов. О какой программе вы говорите? Allen 9 лет назад 0
xxd берет файл в двоичном формате и выводит его в TEXTUAL-представлении, так что в любом случае это не то, что вам нужно. Allen 9 лет назад 0
@Allen, это просто код, написанный на python, в котором не так много методов обработки файлов, таких как буферы или модули stringIO. (Ничего такого огромного или впечатляющего в этой программе / коде). так что если вы думаете, что это не то, что я должен делать, у вас есть предложения. arvindh 9 лет назад 0
0
Allen

You will have to write your own binary to hex function ...

cut -f2-8 -d' ' infile | tr -d '\n' | tr ' ' '\n' | while read l; do echo -n $(bin_to_hex($l)) >> outfile (( ++n )) (( n % 60 == 0)) && echo "" >> outfile done 

This should output the same format as -p which can then be run through -r. If you read the man page for xxd you will read that there is no -r for -b. It says so on the excerpt that you included in your question.

Должен ли я поместить эти строки в файл, а затем запустить его как `.sh`, ..? arvindh 9 лет назад 0
Это не восстановит точный текст. Просто добавьте ввод на каждый 60-й символ! Romeo Ninov 9 лет назад 0
Вы можете поместить его в файл или в командную строку. Это выведет тот же формат, что и `-p`: 60 шестнадцатеричных значений в строке. Allen 9 лет назад 0
Понятно, чтобы вы переписали кодер Romeo Ninov 9 лет назад 0
Терминал говорит: bash: подстановка команд: строка 18: синтаксическая ошибка рядом с неожиданным токеном `$ l 'bash: подстановка команд: строка 18:` bin_to_hex ($ l))' arvindh 9 лет назад 0
Вы должны написать свою собственную функцию `bin_to_hex ()`. Вы понимаете, что xxd выводит текстовые представления файлов, верно? Allen 9 лет назад 0
@ Аллен, да, я поняла. и спасибо за помощь arvindh 9 лет назад 0

Похожие вопросы