MIN_SAFE_INTEGER
からMAX_SAFE_INTEGER
までのJavaScript番号(符号を含まない53ビット)の範囲を、符号とヌル識別子を考慮して2バイトシフトした7バイトにまたがるビット列に変換したいと考えています。JavaScriptで任意の順序のバイト配列に整数を変換する最速の方法は?
これまで私が思い付くした最高のは、次のとおりです。
function toUint8Array(data) {
data = data.toString(2);
data = new Array(65 - data.length).join('0') + data;
var ret = new Uint8Array(data.length/8);
for (var i = 0; i < 8; i++) {
ret[i] = 0;
ret[i] += (data[i * 8] == '1' ? 128 : 0);
ret[i] += (data[(i * 8) + 1] == '1' ? 64 : 0);
ret[i] += (data[(i * 8) + 2] == '1' ? 32 : 0);
ret[i] += (data[(i * 8) + 3] == '1' ? 16 : 0);
ret[i] += (data[(i * 8) + 4] == '1' ? 8 : 0);
ret[i] += (data[(i * 8) + 5] == '1' ? 4 : 0);
ret[i] += (data[(i * 8) + 6] == '1' ? 2 : 0);
ret[i] += (data[(i * 8) + 7] == '1' ? 1 : 0);
}
return (ret);
}
あなたは右のオフ伝えることができるように、これはひどく遅いだろう(とビットはまだシフトされていません7つのアクティブバイト全体に2つの場所があります)。
これを行う方法はありますか?理想的には、文字列解析を完全に避けることによって?
実際のDataView、**正しく使用**つまりませんどのようにあなたがそれをしようとしてきたが、ささやかな(ChromeでFirefoxの、1.5倍で3倍、7.5倍** ** Internet Explorerでの)速度向上を与えることができます - 私はそれをやや最適にしているかもしれません –
@JaromandaX私が得ようとしている出力をどのように管理しているのか不思議です。 – CoryG
私はフィドルを作ることができますが、入力は厳密にMIN_SAFE_INTEGER - > MAX_SAFE_INTEGER - 1つの質問に限定されています...符号/ヌルビットは7バイト目のLSBか最初のバイトのMSBですか? –