Я хочу преобразовать диапазон MIN_SAFE_INTEGER
через MAX_SAFE_INTEGER
номера JavaScript (53-биты, не включая знак), в строку бит, разбросанную по 7 байтам, сдвинутую на два, чтобы разрешить знак и нулевые идентификаторы.
До сих пор лучшее, что я придумал, это:
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 активным байтам.)
Есть ли способ сделать это быстрее? В идеале, избегая синтаксического анализа вообще?