如何提高UTF32到UTF16代理对转换器的性能

时间:2016-06-02 15:33:51

标签: javascript performance unicode

我正在使用以下转换器进行Unicode字符的拆分,而不是正常的'平面上。

function toUTF16Pair(x) {
        var first = Math.floor((x - 0x10000) / 0x400) + 0xD800;
        var second = ((x - 0x10000) % 0x400) + 0xDC00;
        return '\\u'+first.toString(16) + '\\u'+second.toString(16);
}

我正在寻求性能改进(如果可能的话)。

1 个答案:

答案 0 :(得分:2)

像往常一样,我自己带着一些二元魔法。请试着打败这个。

function toUTF16Pair(x) {
    return '\\u' + ((((x - 0x10000) >> 0x0a) | 0x0) + 0xD800).toString(16) 
         + '\\u' + (((x - 0x10000) & 0x3FF) + 0xDC00).toString(16)
}

如果有人想知道它是如何工作的:
>> 0x0a - 是二进制右移10个位置,相当于除以1024 | 0x0 - 相当于Math.floor
& 0x3FF - 因为2的模数可以表示为(x % n == x & (n - 1)),在我的例子中是& 1063十进制。

希望这能为您节省一些时间。