GNU/Linux >> Linux Esercitazione >  >> Linux

Supporto Big Endian e Little Endian per l'ordinamento dei byte

Su entrambe le piattaforme hai

per short (16bit):htons() e ntohs()

per long (32bit):htonl() e ntohl()

Il htonll() mancante e ntohll() per long long (64 bit) potrebbe essere facilmente costruito da quei due. Guarda questa implementazione per esempio.

Aggiornamento-0:

Per l'esempio collegato sopra, Simon Richter menziona in un commento che non deve necessariamente funzionare. La ragione di ciò è:il compilatore potrebbe introdurre byte extra da qualche parte nelle unioni utilizzate. Per ovviare a questo i sindacati devono essere imballati. Quest'ultimo potrebbe portare a una perdita di prestazioni.

Quindi ecco un altro approccio sicuro per costruire il *ll funzioni:https://stackoverflow.com/a/955980/694576

Aggiornamento-0.1:

Dal commento di bames53 tendo a concludere che il primo esempio collegato sopra non deve essere usato con C++, ma solo con C.

Aggiornamento 1:

Per ottenere la funzionalità del *ll functions su Linux questo approccio potrebbe essere il "migliore".


Non gli stessi nomi, ma esiste la stessa funzionalità.

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

_byteswap_uint64, _byteswap_ulong, _byteswap_ushort


htons e htonl (e macro simili) vanno bene se insisti a gestire il byte sex.

Tuttavia, è molto meglio eludere il problema emettendo i dati in ASCII o simili. Ci vuole un po' più di spazio e la trasmissione sulla rete è un po' più lenta, ma ne vale la pena per la semplicità e l'impermeabilità al futuro.

Un'altra opzione è quella di smontare numericamente i tuoi int e short. Quindi tu &0xff e dividi ripetutamente per 256. Ciò fornisce un unico formato su tutte le architetture. Ma ASCII ha ancora il vantaggio perché è più facile eseguire il debug con.


Linux
  1. Come utilizzo Ansible e anacron per l'automazione

  2. Bash For Loop Guida ed esempi

  3. RedHat e SUSE hanno annunciato di ritirare il supporto per OpenLDAP

  4. Suggerimenti e trucchi per curl e wget

  5. Suggerimento per professionisti:per, mentre e fino a loop

Supporto per Tmux, Term e 256 colori?

Un grande cambiamento per Samba in Ubuntu 22.04 e come aggirarlo

Codice per malloc e gratuito

Interfaccia a nastro per GTK e Qt

Qual è la differenza tra un trattino e due trattini per i parametri del prompt dei comandi?

Quanto è grande (in bit) un UID Unix?