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.
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 2 – 015916
- e – 0000000001100101 2 – 006516
- p – 0000000001110000 2 – 007016
- a – 0000000001100001 2 – 006116
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-endian – AA BB CC DD
- little-endian – DD CC BB AA