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 edictul î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, un război sângeros a izbucnit î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 . Pe de altă parte, 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 începând de la octetul cel mai puțin semnificativ (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 originale î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 folosite 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 uneori folosiți și 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