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.
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.
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.
Jawaban:
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.
sumber
Anda dapat byteswap dengan
dd
. Apakah itu cukup? Jika tidak, perbarui pertanyaan Anda untuk memberikan contoh file input dan file yang diharapkan.sumber
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
Untuk mengubah endianess file, dengan asumsi ukuran kata (32-bit), liner 1 ini cocok untuk Anda:
sumber