bitlvl
SR

Endianness konvertor

Unesite vrednost i širinu. Dobijate oba redosleda bajtova, bajtove onako kako bi bili upisani u memoriju ili paket, i kod za njihovu zamenu.

Širina
Unos je
 
  

Rezultati i poruke ovog alata prikazuju se na engleskom.

Šta je endianness

Višebajtni broj mora da se čuva bajt po bajt, a postoje dva razumna redosleda. Big-endian stavlja najznačajniji bajt na najnižu adresu, onako kako pišemo brojeve: 0x12345678 postaje 12 34 56 78. Little-endian stavlja najmanje značajan bajt prvi: 78 56 34 12. x86, x86-64 i (podrazumevano) ARM su little-endian; mrežni protokoli (IP, TCP, DNS), Java class datoteke, PNG i većina formata sa velikih sistema su big-endian, zbog čega „mrežni redosled bajtova“ znači big-endian.

Kada je bitan

Unutar jednog programa na jednoj mašini, nikad: CPU to rešava. Postaje bitan onog trenutka kada bajtovi pređu granicu: upis strukture u datoteku, čitanje paketa, komunikacija sa senzorom preko SPI-ja, mapiranje binarnog formata datoteke ili tumačenje heks ispisa. Pročitati 78 56 34 12 u ispisu x86 memorije i pomisliti da to znači 0x78563412 je klasična greška.

Funkcije

JezikHost → mreža (big-endian)Proizvoljna zamena
Chtonl, htons, htobe64__builtin_bswap32
Gobinary.BigEndian.PutUint32bits.ReverseBytes32
Pythonstruct.pack('>I', x)x.to_bytes(4, 'little')
Rustx.to_be_bytes()x.swap_bytes()
JavaScriptDataView.setUint32(o, x)DataView sa littleEndian=true

UTF-16 i BOM

Tekst u UTF-16 ima isti problem, zbog čega datoteke mogu da počnu oznakom redosleda bajtova (BOM): FE FF za big-endian, FF FE za little-endian. UTF-8 nema redosled bajtova i ne treba mu BOM.

Pitanja

Koji endianness koristi moj računar?

Gotovo sigurno little-endian: svi x86 i x86-64 procesori su takvi, a ARM (telefoni, Apple Silicon, Raspberry Pi) u praksi radi kao little-endian. Big-endian opstaje u mrežnim protokolima i nekim ugrađenim i mainframe sistemima (s390x, stariji PowerPC, SPARC).

Zašto je mreža big-endian?

Istorijska konvencija iz ranog ARPANET-a i IBM/Motorola mašina, zapisana u RFC 1700. Svaki protokol od tada je sledi, pa svaki socket API ima htons/htonl.

Da li endianness utiče na bitove unutar bajta?

Ne. Bajt se uvek čita kao celina. Redosled bitova se javlja samo u serijskim protokolima i nekim CRC algoritmima i to je zasebno pitanje.

Kako da otkrijem endianness u vreme izvršavanja?

Upišite 1 u 32-bitni ceo broj i pogledajte prvi bajt: 1 znači little-endian. U praksi radije koristite eksplicitne funkcije za konverziju da bi kod radio svuda.

Šta je middle-endian?

PDP-11 je čuvao 32-bitne vrednosti kao dve little-endian 16-bitne polovine u big-endian redosledu (34 12 78 56). Izumro je, ali se termin i dalje koristi za formate datuma poput MM-DD-YYYY.