Utwórz ciąg UTF-16 z znaku *
Mam więc standardowy ciąg C:
char* name = "Jakub";
I chcę przekonwertować go na UTF-16. Zorientowałem się, że UTF-16 będziedwa razy dłuższy - bierze jedna postaćdwa znaki.
Więc tworzę inny ciąg:
char name_utf_16[10]; //"Jakub" is 5 characters
Teraz wierzę, że ze znakami ASCII będę używał tylko niższych bajtów, więc dla wszystkich będzie tak74 00
dlaJ
i tak dalej. Z takim przekonaniem mogę stworzyć taki kod:
void charToUtf16(char* input, char* output, int length) {
/*Todo: how to check if output is long enough?*/
for(int i=0; i<length; i+=2) //Step over 2 bytes
{
//Lets use little-endian - smallest bytes first
output[i] = input[i];
output[i+1] = 0; //We will never have any data for this field
}
}
Ale z tym procesem skończyłem"Jkb"
. Nie wiem, jak to sprawdzić - właśnie wysłałem łańcuch do serwera Minecraft Bukkit. I to właśnie powiedział po rozłączeniu:
13:34:19 [INFO] Rozłączaniejkb?? [/127.0.0.1:53215]: Nieaktualny serwer!
Uwaga: Wiem, że Minecraft używa big-endian. Powyższy kod jest tylko przykładem, w rzeczywistości moja konwersja została zaimplementowana w klasie.