2013-03-21 43 views
0

JavaScript中是否存在将字符转换为代码的技巧,而不是.charCodeAt(i)? 我想通过最快的方式将字符串转换为二进制数组(即比charCodeAt更快)。 但我也很想了解慢方法。JavaScript:将字符转换为代码或将字符串转换为二进制数组(非数字数组)的代码

+0

1)字符串有很多二进制表示形式。你想要哪一个? 2)什么是JS二进制数组? – 2013-03-21 09:44:17

+0

我的意思是数组数组(数组与字符代码) – Pochemuchkin 2013-03-21 10:29:56

回答

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; 
} 

一般来说,尽管如果你可以用本地代码去,去与本机代码。

+0

是的,只是做了一个快速测试,并使用charCodeAt是2 - 3倍快。 – hobberwickey 2013-03-21 11:05:31

+0

hobberwickey,我怀疑这一点。但无论如何,这是charCodeAt的替代方案。 ;) – Pochemuchkin 2013-03-21 11:19:59

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()

+0

我搜索不charCodeAt解决方案(它清楚地在问题中描述)。 – Pochemuchkin 2013-03-21 11:17:20

+0

@Poch,我说没有这样的事情。 – 2013-03-21 11:24:09

0

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

"€".charCodeAt(1) = 8364 

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

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

+0

有时一个字符可以超过两个字节。但我们可以假设一个字符串是一个简单的unicode字符串,具有32位字符(0..65535),应该将其转换为32位无符号整数(以二进制表示形式)。 – Pochemuchkin 2013-03-21 11:24:33