我正在寻找将MIN_SAFE_INTEGER
至MAX_SAFE_INTEGER
范围内的JavaScript编号(53位不包括符号)转换为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个活动字节中有两个地方)。
有什么办法可以更快地做到这一点?理想情况下避免字符串解析?
其实数据视图,**正确使用**即不是你是如何尝试它,可以给一个温和的(3X在Firefox,1.5X在Chrome中,** ** 7.5X在Internet Explorer)的速度提高 - 我可能会做得不是最佳 –
@JaromandaX我很想知道你是如何管理的,以产生我试图得到的输出。 – CoryG
我可以做一个小提琴,但是...输入严格限于MIN_SAFE_INTEGER - > MAX_SAFE_INTEGER - 一个问题......符号/空位应该是第7个字节的LSB还是第一个字节的MSB? –