0

除了 .charCodeAt(i) 之外,JavaScript 中是否有将字符转换为其代码的技巧?我想以最快的方式将字符串转换为二进制数组(即比 charCodeAt 更快)。但我也有兴趣了解慢速方法。

4

3 回答 3

0

你可以做一个查找表,但我怀疑它会更快。就像是:

function(str){
    var codes = {},
        output = [];

    for (var i=0; i<256; i++){
        String.codes[fromCharCode(i)] = i;
    }

    for (var i=0; i<str.length; i++){
        output.push(codes[str[i]]);
    }

     return output;
}

一般来说,如果您可以使用本机代码,请使用本机代码。

于 2013-03-21T10:46:06.020 回答
0

我怀疑你会找到比这段代码更快的东西来完成你想要的:

function getCharArray(str)
{
    var chars = [];
    for (var i = 0, n = str.length; i != n; ++i) {
        chars.push(str.charCodeAt(i));
    }
    return chars;
}

您必须这样做,因为 JavaScript 没有单独的字符类型。即使是单个字符仍然是字符串,因此您需要String.charCodeAt().

于 2013-03-21T10:38:28.957 回答
0

javascript 中的字符串是 unicode,而不是 ascii,这意味着单个字符的代码可能超过一个字节。

"€".charCodeAt(1) = 8364

这适合两个字节。如果将其转换回二进制,则可以将其解释为一个 2 字节字符或 2 个 1 字节字符。只是没有办法知道。知道 unicode char 的长度很棘手。这可能会帮助您了解为什么这个问题很难解决:http ://www.joelonsoftware.com/articles/Unicode.html

当然,我并不是说你不能将 unicode 字符串转换为二进制,而是说这是你需要解决的任务,而不仅仅是将单个字符转换为字节。

于 2013-03-21T11:03:04.690 回答