所以我有标准的 C 字符串:
char* name = "Jakub";
我想将其转换为 UTF-16。我发现,UTF-16 的长度会是原来的两倍——一个字符需要两个字符。
所以我创建了另一个字符串:
char name_utf_16[10]; //"Jakub" is 5 characters
现在,我相信对于 ASCII 字符,我只会使用较低的字节,所以对于所有这些字符,它都会像74 00
forJ
等等。有了这个信念,我可以编写这样的代码:
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
}
}
但是,通过这个过程,我以"Jkb"
. 我不知道如何正确测试 - 我刚刚将字符串发送到 Minecraft Bukkit 服务器。这就是它在断开连接时所说的:
13:34:19 [INFO] 断开jkb ?? [/127.0.0.1:53215]:过时的服务器!
注意:我知道 Minecraft 使用 big-endian。上面的代码只是一个例子,事实上,我已经在课堂上实现了我的转换。