Есть ли oneliner, который преобразует двоичный файл с маленького endian в big endian?

и наоборот.

Я использую RedHat, если это необходимо.

12 голосов | спросил Will 29 +03002015-10-29T19:22:09+03:00312015bEurope/MoscowThu, 29 Oct 2015 19:22:09 +0300 2015, 19:22:09

4 ответа


32

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

Если, например, есть строка внутри двоичного файла, она не должна быть преобразована, а целое число в 4 байта может нуждаться в различном обращении, чем целое число в два байта.

Другими словами, для преобразования порядка байтов вам требуется описание типа данных.

ответил schily 29 +03002015-10-29T19:33:00+03:00312015bEurope/MoscowThu, 29 Oct 2015 19:33:00 +0300 2015, 19:33:00
31

Вы можете использовать байты с помощью dd. Это достаточно? Если нет, обновите свой вопрос, чтобы привести пример входного файла и ожидаемого outfile.

echo hello >infile
dd conv=swab <infile >outfile

hex infile
   0000 68 65 6c 6c 6f 0a                                 hello.
hex outfile
   0000 65 68 6c 6c 0a 6f                                 ehll.o
ответил roaima 29 +03002015-10-29T19:28:39+03:00312015bEurope/MoscowThu, 29 Oct 2015 19:28:39 +0300 2015, 19:28:39
2

Если вы не заботитесь о содержимом файла и просто хотите поменять байты, попробуйте

ответил 30 +03002015-10-30T07:00:11+03:00312015bEurope/MoscowFri, 30 Oct 2015 07:00:11 +0300 2015, 07:00:11
0

Чтобы изменить окончание файла, предполагая размер слова (32-разрядный), этот 1 лайнер должен работать для вас:

hexdump -v -e '1/4 "%08x"' -e '"\n"' input_file | xxd -r -p > output_file
ответил hesham_EE 27 PM00000090000005731 2018, 21:27:57

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132