Ordinea de octeți

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Ordinea L 'byte (cunoscută și sub numele de big-endian, little-endian sau middle-endian conform diferitelor metode), în calcul , indică diferite moduri utilizate de computere pentru a stoca în memorie date de dimensiuni mai mari la octeți (de exemplu, Word , dword , qword ).

Istorie

Endianitatea (ordinea de octeți) a unui computer depinde în esență de arhitectura hardware utilizată. De exemplu, Intel și Digital folosesc formatul endian mic, în timp ce Motorola , IBM și Sun folosesc formatul endian mare. Formatul datelor conținute în antetele protocoalelor de rețea este, de asemenea, mare; alte exemple de utilizare a acestor două formate diferite sunt cele ale magistralei PCI , care este puțin endiană, sau cea a magistralei VME, care este mare endiană.

Etimologie

Termenii big-endian și little-endian derivă, după cum spune Jonathan Swift în romanul Călătoriile lui Gulliver , din numele a două populații care au trăit pe fabuloasele insule Lilliput și Blefuscu și care intraseră în rivalitate pentru modul în care au deschis ouăle.: ruperea vârfului sau a fundului: în Lilliput, prin edict al împăratului al cărui fiu s-a tăiat odată prin deschiderea unui ou din capătul mai mare, i s-a ordonat să deschidă ouăle din capătul mai scurt (micii endieni); Oponenții care doreau să păstreze tradiția spargerii ouălor din capătul mai mare (marii endieni) s-au refugiat la Blefuscu. Din cauza acestei diferențe și a legitimității sale imperiale, izbucnise un război sângeros între cele două insule.

Descriere

Această diferențiere nu se referă la poziția biților din octet, caz în care vorbim de ordinea biților și nici pozițiile caracterelor dintr-un șir . În schimb, este important în interpretarea (decodarea) șirurilor de caractere multi-octet, de exemplu codarea UTF-16 a standardului unicode .

Clasificare

Diferența dintre cele două sisteme este dată de ordinea în care sunt stocate sau transmise octeții care alcătuiesc datele care trebuie stocate:

  • big-endian : stocarea / transmisia pornind de la cel mai semnificativ octet (cel mai mare capăt) și terminând cu cel mai puțin semnificativ, este utilizat de procesoarele Motorola ;
  • little endian : stocarea / transmisia pornind de la cel mai puțin semnificativ octet (cel mai mic capăt) și terminând cu cel mai semnificativ, este utilizat de procesoarele Intel ;

Notă: termenul endian generează adesea confuzie; pentru a vă aminti corect diferența, amintiți-vă că endian se referă la sfârșitul de la care datele inițiale încep să fie procesate (scrise / citite în / din memorie sau transmise / primite pe / de pe canalul de comunicație), nu în ce scop se termină ultima dată în memorie sau pe canalul de comunicare.

Ordinea big-endian a fost aleasă ca ordine standard în multe protocoale utilizate pe internet , prin urmare se numește și ordine de octeți de rețea . În schimb, ordinea octeților gazdei este ordinea nativă a gazdei

Exemple

În cazul unui WORD (16 biți), numărul hexazecimal 0x0123 este stocat ca:

 Little endian Big endian
       + ---- + ---- + + ---- + ---- +
       | 0x23 | 0x01 | | 0x01 | 0x23 |
       + ---- + ---- + + ---- + ---- +
 octet: 0 1 0 1

În cazul unui DWORD (32 biți), numărul hexazecimal 0x01234567 va fi stocat ca:

 Little endian Big endian
       + ---- + ---- + ---- + ---- + + ---- + ---- + ---- + ---- +
       | 0x67 | 0x45 | 0x23 | 0x01 | | 0x01 | 0x23 | 0x45 | 0x67 |
       + ---- + ---- + ---- + ---- + + ---- + ---- + ---- + ---- +
 octet: 0 1 2 3 0 1 2 3

(În exemple, valoarea 0x01 este cel mai semnificativ octet)

Funcții pentru conversie

Următoarele funcții pot fi utilizate pentru a converti de la endian puțin la mare și invers (conversia este perfect simetrică).

Implementare în C

Conversia cuvântului

 unsigned short int Endian_Word_Conversion ( cuvânt scurt int nesemnat ) {
    return (( cuvânt >> 8 ) & 0x00FF ) | (( cuvânt << 8 ) & 0xFF00 ) ;
 }

Conversie cu dublu cuvânt

 unsigned long int Endian_DWord_Conversion ( nesemnat long int dword ) {
    return (( dword >> 24 ) & 0x000000FF ) | (( dword >> 8 ) & 0x0000FF00 ) | (( dword << 8 ) & 0x00FF0000 ) | (( dword << 24 ) & 0xFF000000 );
 }

Implementare în C #

UInt32

 public uint Endian_UInt32_Conversion ( valoare uint ) {
    return (( valoare >> 24 ) & 0 x000000FF ) | (( valoare >> 8 ) & 0 x0000FF00 ) | (( valoare << 8 ) & 0 x00FF0000 ) | (( valoare << 24 ) & 0 xFF000000 );
 }

UInt64

 publice ulong Endian_UInt64_Conversion (valoare ulong) {
    return (( valoare >> 56 ) & 0 x00000000000000FF ) | (( valoare >> 40 ) și 0 x000000000000FF00 ) | (( valoare >> 24 ) & 0 x0000000000FF0000 ) | (( valoare >> 8 ) & 0 x00000000FF000000 ) | (( valoare << 8 ) și 0 x000000FF00000000 ) 
 | (( valoare << 24 ) & 0 x0000FF00000000 ) | (( valoare << 40 ) & 0 x00FF0000000000 ) | (( valoare << 56 ) & 0 xFF000000000000 );
 }

Folosiți pentru formatele de dată

Termenii sunt, de asemenea, folosiți uneori pentru a indica formatul datei:

  • zz / ll / aaaa: data europeană este puțin endiană
  • aaaa / ll / zz: datele Big-endian sunt utilizate în Japonia și ISO 8601
  • mm / zz / aaaa: data folosită în SUA este mijlocie

Notă


Elemente conexe

Alte proiecte

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT