GNU/Linux >> Belajar Linux >  >> Linux

Dukungan Big Endian dan Little Endian untuk pemesanan byte

Di kedua platform yang Anda miliki

untuk short (16bit):htons() dan ntohs()

untuk long (32bit):htonl() dan ntohl()

htonll() yang hilang dan ntohll() untuk long long (64bit) dapat dengan mudah dibangun dari keduanya. Lihat implementasi ini misalnya.

Pembaruan-0:

Untuk contoh yang ditautkan di atas, Simon Richter menyebutkan dalam komentar, bahwa itu belum tentu berhasil. Alasan untuk ini adalah:Kompiler mungkin memasukkan byte tambahan di suatu tempat di serikat pekerja yang digunakan. Untuk menyiasatinya, serikat pekerja perlu dikemas. Yang terakhir ini dapat menyebabkan penurunan performa.

Jadi inilah pendekatan gagal-aman lainnya untuk membuat *ll fungsi:https://stackoverflow.com/a/955980/694576

Perbarui-0.1:

Dari komentar bames53, saya cenderung menyimpulkan bahwa contoh pertama yang ditautkan di atas tidak boleh digunakan dengan C++, tetapi hanya dengan C.

Pembaruan-1:

Untuk mencapai fungsionalitas dari *ll fungsi di Linux pendekatan ini mungkin yang 'terbaik'.


Bukan nama yang sama, tetapi fungsi yang sama memang ada.

EDIT:Tautan yang Diarsipkan -> https://web.archive.org/web/20151207075029/http://msdn.microsoft.com/en-us/library/a3140177(v=vs.80).aspx

_byteswap_uint64, _byteswap_ulong, _byteswap_upendek


htons dan htonl (dan makro serupa) bagus jika Anda bersikeras berurusan dengan seks byte.

Namun, jauh lebih baik untuk menghindari masalah ini dengan mengeluarkan data Anda dalam ASCII atau yang serupa. Dibutuhkan sedikit lebih banyak ruang, dan mentransmisikan melalui jaringan sedikit lebih lambat, tetapi kesederhanaan dan kesiapsiagaan masa depan sangat berharga.

Pilihan lainnya adalah memisahkan int dan short Anda secara numerik. Jadi Anda &0xff dan bagi dengan 256 berulang kali. Ini memberikan format tunggal pada semua arsitektur. Namun ASCII masih memiliki kelebihan karena lebih mudah untuk di-debug.


Linux
  1. Bagaimana saya menggunakan Ansible dan anacron untuk otomatisasi

  2. Panduan Bash For Loop dan Contohnya

  3. RedHat Dan SUSE Diumumkan Untuk Menarik Dukungan Untuk OpenLDAP

  1. Tips dan trik untuk curl dan wget

  2. Kiat Pro:Untuk, Sementara, dan Hingga Perulangan

  3. Ganti Baris Dengan Konten Lain Menggunakan Sed Dan Paralel Untuk File Besar?

  1. Linux – Dukungan Umum Linux Untuk IPv6 Siap?

  2. Medleytext – Aplikasi Pencatat yang Intuitif dan Bergaya untuk Pemrogram

  3. Tantangan dan Janji Big Data