Archiv pro štítek: endianita

UTF-16 a binární reprezentace

Následující článek navazuje na velmi podobný text, jenž popisoval převod do dvojkové soustavy v rámci kódování UTF-8. Z mého pohledu se transformace do binární reprezentace u UTF-16 provádí ještě jednodušeji než v případě UTF-8.

Převádět budu slovo řepa a neobejdu se pochopitelně bez Unicode tabulky. Nejprve vyhledám znak ř. Dozvídám se hodnotu 15916 a ihned si spočítám podobu v dvojkové soustavě – 1 0101 10012. Nyní nastává fáze samotného kódování do UTF-16. S pomocí níže zobrazených pravidel nacházejících se například na Wikipedii určím počet dostupných bitů. Vkládat mohu pouze na místa označená jako x.

 UTF-16

Především si povšimněte, že v případě dvou bajtů ve své podstatě zapisuji pouze samotný binární kód. Teprve v případě čtyř bajtů nastupuje určitá forma režie. Písmeno ř tedy v UTF-16 vypadá takto – 0000000101011001 2. Pro přehlednost a kratší zápis lze provést převod do šestnáctkové soustavy. Jak však patrně již správně tušíte, výsledek vypadá shodně jako zápis ř v Unicode, tedy 015916. Obdobně postupuji i u dalších zbývajících znaků:

  • ř – 0000000101011001 2015916
  • e – 0000000001100101 2006516
  • p – 0000000001110000  2007016
  • a – 0000000001100001  2006116

 K ověření doporučuji následující nástroj.

Endianita

Pro zajímavost dále uvedu, že UTF-16 v sobě nese informaci o použité endianitě. K tomuto účelu se využívá BOM (byte order mark). Existují dvě varianty:

  • big-endian – Na nejnižší adresu se ukládá nejvýznamnější bit. Následují další bity až po ten nejméně významný. V paměti proto nejprve narazíme na nejvýznamnější bit.
  • little-endian – Nejnižší adresa obsahuje nejméně významný bit. Následující narůstající paměťové buňky slouží k ukládání bitů směrem k tomu nejvýznamnějšímu.

Číslo 0xAABBCCDD tedy bude uloženo následovně:

  • big-endianAA BB CC DD
  • little-endianDD CC BB AA