.charCodeAt(i)以外のコードに文字を変換するJavaScriptのトリックはありますか?文字列を最速の方法で(つまり、charCodeAtよりも高速に)バイナリ配列に変換したいと思います。しかし、私は遅い方法についても知りたいと思っています。
3 に答える
私はあなたがあなたが望むことを達成するためにこのコードよりも速い何かを見つけるとは思えません:
function getCharArray(str)
{
var chars = [];
for (var i = 0, n = str.length; i != n; ++i) {
chars.push(str.charCodeAt(i));
}
return chars;
}
JavaScriptには単一の文字に個別のタイプがないため、この方法で行う必要があります。1文字でも文字列であるため、が必要String.charCodeAt()
です。
ルックアップテーブルを作成することもできますが、これ以上高速になるとは思えません。何かのようなもの:
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;
}
一般的に言えば、ネイティブコードを使用できる場合は、ネイティブコードを使用してください。
javascriptの文字列は、ASCIIではなくUnicodeです。つまり、1文字のコードが1バイトを超える場合があります。
"€".charCodeAt(1) = 8364
これは2バイトに収まります。これをバイナリに戻すと、1つの2バイト文字または2つの1バイト文字として解釈される可能性があります。知る方法はありません。Unicode文字の長さを知るのは難しいです。これは、この問題を解決するのが難しい理由を理解するのに役立つ場合があります:http: //www.joelonsoftware.com/articles/Unicode.html
もちろん、Unicode文字列をバイナリに変換できないと言っているのではありません。これは、単一の文字をバイトに変換するだけでなく、解決する必要のあるタスクであると言っています。