Endianita a velikosti: KB, KiB a chybějících 34 GB
Číslo 0x12345678 má čtyři bajty. V jakém pořadí leží v paměti? Existují dvě
odpovědi a obě se používají:
| pořadí | kdo | |
|---|---|---|
| big endian | 12 34 56 78 — nejvyšší bajt první | síťové protokoly, mnoho sběrnic, Motorola |
| little endian | 78 56 34 12 — nejnižší první | x86, ARM v běžném režimu, RISC-V |
Jméno je z Gulliverových cest, kde se válčí o to, ze kterého konce se má rozklepnout vejce. Je to přesná analogie: ani jedno není lepší, ale dohodnout se je nutné.
Big endian se čte líp, protože bajty jdou v tom pořadí, ve kterém se číslo píše. Little endian má tu vlastnost, že adresa nejnižšího bajtu je adresa celého čísla bez ohledu na šířku — což se hodilo, když se hodně přetypovávalo mezi 8, 16 a 32 bity.
Kdy na tom záleží
Uvnitř jednoho stroje nikdy. Procesor uloží a přečte to samé. Záleží na tom přesně ve chvíli, kdy bajty opustí stroj: soubor, síť, sběrnice, sdílená paměť mezi dvěma různými procesory. Proto se pořadí bajtů v síti předepsalo jako big endian a říká se mu network byte order — nikoli proto, že by byl lepší, ale aby to bylo jedno.
Kde na to narazíte v týhle akademii: senzor po SPI nebo I²C posílá šestnáctibitovou hodnotu ve dvou bajtech, a katalogový list říká, který jde první. Když se to prohodí, měření nevypadá jako nesmysl — vypadá jako jiné, ale možné číslo. To je horší než chyba, kterou je vidět. Podrobně v LinkLabu.
A ta druhá věc, o které se pořád lže
Disk s nápisem „500 GB“ se v systému hlásí jako 465 GB. Nikdo nic neukradl. Výrobce počítá v mocninách deseti (1 GB = 10⁹ bajtů), operační systém dlouho počítal v mocninách dvou (1024³) a říkal tomu taky „GB“.
Správné jednotky pro mocniny dvou jsou KiB, MiB, GiB (kibi-, mebi-, gibi-), zavedené normou IEC v roce 1998. Rozdíl roste s každou předponou:
| předpona | rozdíl |
|---|---|
| kB / KiB | 2,4 % |
| MB / MiB | 4,9 % |
| GB / GiB | 7,4 % |
| TB / TiB | 10,0 % |
A jedna past navíc: síťová rychlost je v bitech, ne v bajtech. „100 Mb/s“ je při nejlepším 12,5 MB/s, a to ještě před režií rámců. Malé b a velké B se liší osmkrát.