Apakah ada oneliner yang mengubah file biner dari little endian ke big endian?

14

dan sebaliknya.

Saya menjalankan RedHat jika relevan.

Mahasiswa Fermat
sumber
6
Jenis file biner apa?
Stéphane Chazelas
1
Bagaimanapun, untuk format file apa pun, saya yakin Anda bisa menulis satu-liner untuk mengonversi endianness-nya menggunakan Perl dan pak / bongkar . Untuk beberapa format, itu hanya akan menjadi garis yang lebih panjang daripada yang lainnya. ;-)
Ilmari Karonen

Jawaban:

34

Anda tidak dapat melakukan ini karena untuk konversi seperti itu, Anda perlu mengetahui arti konten biner.

Jika misalnya ada string di dalam file biner, file itu tidak boleh dikonversi dan integer 4 byte mungkin memerlukan perlakuan berbeda dari integer dua byte.

Dengan kata lain, untuk konversi urutan byte, Anda memerlukan deskripsi tipe data.

schily
sumber
7
Saya hanya mengatakan itu. itu tidak sesederhana hanya menukar setiap pasangan byte. misalnya integer 4 byte 01 02 03 04 di bigendian dapat terlihat seperti ini di little endian 04 02 03 01 BUKAN 02 01 04 03 cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html
Rob
1
Setuju, endianness tidak masuk akal pada aliran byte mentah dan tanpa jenis ... ini harus menjadi jawaban yang diterima jika OP tidak mengedit pertanyaannya
Thomas
[Kutipan diperlukan] - AFAIK, kecuali aplikasi secara eksplisit mempertahankan beberapa urutan byte dan bukan yang lain, maka biasanya byte atau kata-kata harus dipesan secara konsisten.
Dijeda sampai pemberitahuan lebih lanjut.
1
@ DennisWilliamson: Sebuah string UTF-8 atau ASCII tidak memiliki endianness. UTF-8 menentukan urutan byte sementara ASCII adalah 7 bit dan tidak memiliki token multi-byte. String UTF-16 memang memiliki endianness dan mungkin atau mungkin tidak memiliki BOM untuk menandai endianness itu. Biner Unix yang dimaksudkan untuk berinteraksi dengan Windows atau Java mungkin memiliki kedua jenis string, yang berarti Anda harus membedakannya saat mengonversi.
Kevin
Saya datang ke sini mencari program di mana Anda memberikan deskripsi data dan data dan mengubahnya. Sejauh ini saya belum menemukan program seperti itu tetapi itu tidak berarti tidak dapat dilakukan.
Levi Morrison
32

Anda dapat byteswap dengan dd. Apakah itu cukup? Jika tidak, perbarui pertanyaan Anda untuk memberikan contoh file input dan file yang diharapkan.

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
sumber
2

Jika Anda tidak peduli dengan isi file dan hanya ingin menukar byte, maka coba endconv . Ini hanya pembungkus di sekitar fungsi konversi byte standar, sehingga mendukung konversi dengan bilangan bulat panjang 2, 4 dan 8 byte. Ini bukan satu liner karena itu adalah program yang terpisah.


sumber
0

Untuk mengubah endianess file, dengan asumsi ukuran kata (32-bit), liner 1 ini cocok untuk Anda:

hexdump -v -e '1/4 "%08x"' -e '"\n"' input_file | xxd -r -p > output_file
hesham_EE
sumber