Mengapa membalik dilakukan pada data dari Big endian sebelum disimpan di LE?

0

Misalkan A adalah mesin BE dan mengirim 0x44332211 mengirim data ke B yang LE. Secara default A akan menggunakan htonl 0x44332211 yang tidak lain adalah 0x44332211.

Sekarang ketika 0x44332211 mencapai B, B tahu bahwa itu adalah format BE, jadi B akan membalik dengan menggunakan fungsi htonl dan mengubahnya ke 0x11223344.

Apa artinya membalik ini? Saya membaca konsep ini dari internet. Mengapa membalik diperlukan sebelum menyimpan?

Karena dalam kasus ini membalik nilai 0x11223344 akan disimpan dalam LE seperti 0x44332211, yang berbeda dari apa yang dikirim oleh A karena B mengartikannya secara berbeda walaupun terlihat mirip?

/ * Konversi dari BE ke LE * /

Subi Suresh
sumber

Jawaban:

2

The htonl()dan ntohl()fungsi dalam endian C perpustakaan besar benar-benar tidak melakukan apa-apa (mereka adalah "no-op" s). Dengan cara ini kode yang sama dapat digunakan pada mesin BE dan LE; dikompilasi dengan lib C pada mesin LE, fungsi-fungsi itu akan membalik byte, tetapi pada mesin BE, mereka akan meninggalkan mereka sama, karena urutan byte jaringan adalah big endian, dan host sudah big endian.

Dengan kata lain, dalam contoh Anda, BE mesin A tidak pernah mengubah apa pun. Hanya mesin LE yang melakukannya.

goldilocks
sumber
Ya goldilocks. Mengapa mesin LE yaitu B membalik data yang diterima? Mengapa tidak menyimpan seperti itu.
Subi Suresh
Karena ini sedikit endian, jadi itu cara menyimpan data. Jika tidak melakukan itu, ketika nilai itu digunakan kemudian, itu akan salah karena byte mundur. Mengapa ada dua gaya adalah saya kira pertanyaan sejarah ... mungkin big endian ada pertama en.wikipedia.org/wiki/Little_endian#History tetapi sedikit endian adalah optimasi tingkat hardware.
goldilocks
> saya merangkum dari input yang telah Anda berikan. Apa pun mesin selalu data disimpan sebagai byte 0 1, byte 2 detik dan seterusnya. Karena B adalah LE, perlu menyimpan dalam urutan terbalik A. jadi kita menggunakan htons (), sehingga byte 0 akan menjadi 11 byte1 akan menjadi 22, byte2 akan menjadi 33 dan byte 4 akan 44.Am i right? tidak perlu khawatir tentang representasi internal di LE dan BE.
Subi Suresh
Ya, selama Anda menggunakan htonl / ntohl sebelum mengirim / setelah menerima, Anda tidak perlu khawatir tentang representasi internal. Meskipun sebagian besar mesin di internet mungkin LE, BE adalah pesanan jaringan untuk memastikan metodologi yang konsisten. Ingat, semua ini hanya berlaku untuk alamat yang digunakan dalam header paket IP - data aktual dalam transmisi IP disusun berdasarkan protokol tingkat tinggi apa pun yang digunakan. Jadi itu bukan segalanya, itu hanya bit khusus (alamat, nomor port).
goldilocks
0

Sebenarnya, membalik tidak diperlukan sebelum penyimpanan dengan cara tertentu. Ini diperlukan karena host menggunakan urutan endian kecil sehingga ketika menerima nomor lebih dari satu byte dari jaringan, ia membalik byte untuk menafsirkan angka itu dengan benar. Kita perlu membalik ini sebelum data digunakan untuk tujuan apa pun.

Sebagai analogi, bayangkan diri Anda membaca manga yang dicetak dengan cara Jepang asli (yaitu halaman yang biasanya menjadi yang terakhir sebenarnya adalah yang pertama). Jika Anda tidak mengetahui fakta ini, dan jangan "membalik" bukunya, Anda tidak akan bisa memahami ceritanya.

lororget
sumber