Adatábrázolás › Endianitás: a bájtok sorrendje
Haladó kiegészítés · középiskola és egyetemi alapozó
Endianitás: a bájtok sorrendje
Ugyanazt a több bájtos értéket két tárolási sorrendben olvasod ki. Megkülönbözteted a bájtsorrendet a bájton belüli bitek sorrendjétől.

A lecke végére
- memóriacímenként kiolvasod a több bájtos értéket
- felismered a big-endian és little-endian sorrendet
- helyesen értelmezed a bájtsorrendet és a BOM-jelzést
Amit már tudsz
- tudod, hogy egy bájt nyolc bit
- ismered a hexadecimális számjegyeket
Melyik bájt kerül a kisebb címre?
Az endianitás a több bájtból álló adategységek bájtsorrendje. Big-endian sorrendben a legnagyobb helyiértékű bájt kerül a legkisebb memóriacímre; little-endian sorrendben a legkisebb helyiértékű. A „nagy” itt a helyiértékre utal, nem a bájt számértékére.
| Memóriacím | Big-endian | Little-endian |
|---|---|---|
| 100 | 4A | 1D |
| 101 | 3B | 2C |
| 102 | 2C | 3B |
| 103 | 1D | 4A |
A bájtokon belüli biteket nem fordítjuk meg. A 4A bájt mindkét esetben 4A marad.
A formátum dönti el az értelmezést
A processzor és a fájlformátum bájtsorrendje eltérhet. A programnak a formátum előírását kell követnie. Nincs minden adatra érvényes alapértelmezett „Intel-formátum”.
Az internetes protokollokban számos több bájtos egész mező big-endian, úgynevezett network byte order sorrendű. Egy hálózaton továbbított szöveg vagy teljes fájl ettől még nem vált automatikusan big-endianné.
Szövegkódolás és BOM
UTF-16 esetén a kezdeti FE FF big-endian, a FF FE little-endian sorrendet jelez. A BOM jelenléte a konkrét formátumtól és protokolltól függ; nem minden szövegfájl tartalmazza.
UTF-32 esetén a megfelelő négybájtos jelek 00 00 FE FF és FF FE 00 00. UTF-8-nál nincs bájtsorrendi választás; az EF BB BF kezdeti jelzés előfordulhat kódolási aláírásként, de nem endianitást választ.
A név Jonathan Swift tojástörési vitájára utal. Ez emlékeztető hasonlat; a műszaki feladatban a bájtok helyiértékét és memóriacímét kell nézni.
Olvasd ki kétféleképpen
Készíts memóriatérképet
Növekvő címeken ezt a négy bájtot látod: 78 56 34 12. Melyik 32 bites hexadecimális értéket adja little-endian, és melyiket big-endian értelmezésben?
Előbb próbáld meg, utána ellenőrizd
Little-endian: 0x12345678. Big-endian: 0x78563412. A little-endian érték felírásakor a bájtok sorrendjét fordítjuk meg, a bájtok két hexadecimális számjegyét együtt hagyjuk.
Ellenőrizd a munkádat
Nézd át a memóriatérképedet, és válaszolj a kérdésekre a leírás visszaolvasása nélkül.
- A memóriacímeket növekvő sorrendben írtad fel?
- Big-endiannál a legnagyobb helyiértékű bájt került a legkisebb címre?
- Teljes bájtokat (két hexadecimális számjegyet) mozgattál, nem egyes számjegyeket?
- A bájtokon belül a bitek sorrendje változatlan maradt?
- Meg tudod mondani, mit jelez az
FF FEegy UTF-16 szövegfájl elején?
Hol találkozol vele a valóságban?
A mai asztali és laptop-processzorok többsége (x86-64), valamint a telefonokban gyakori ARM-processzorok jellemzően little-endian módon dolgoznak. Az internetes protokollok fejlécében a több bájtos számok viszont big-endian (network byte order) sorrendűek. Ezért ha egy program adatot küld a hálózatra vagy egy adott formátumú fájlba ír, átalakítást kell végeznie. Az endianitás hibája jellegzetes tünet: egy 1-es érték 16 777 216-nak (0x01000000) olvasódik.
A little-endian sorrend nem a teljes szám „visszafelé írása”. A 12 34 56 78 megfordítva bájtonként 78 56 34 12, és nem 87 65 43 21.
Elakadtál a hexadecimális jegyekkel? Ismételd át a Helyiérték és hatvány leckét, ahol a 16-os alap is szerepel.

