javascript将float-allocated数字转换为较小的无符号数字

时间:2016-12-01 22:09:50

标签: javascript binary compression

in javascript numbers are always allocated as double precision floats。如果您没有在没有压缩的情况下将大量这些作为二进制文件发送,或者不需要节省内存,那么这很好。如果你需要缩小这些数字,你会怎么做?

明显的目标是将数字存储到尽可能小的字节大小,例如208:1字节,504:2字节。更好的是比特大小的最小数量,例如208:8比特,504:9比特。

示例:

    //myNetwork is a supposed network API that sends as binary

    var x = 208;

    myNetwork.send(x); // sends 01000011010100000000000000000000
    myNetwork.send(x.toString()); //sends 001100100011000000111000

还有typed arrays,但如果它不是blob或文件,变成类型数组会很棘手。在Javascript中的某些网络API上,原始数据通常在您触摸之前表示为字符串。

1 个答案:

答案 0 :(得分:0)

编码

//myNetwork is a supposed network API that sends as binary

var x = 208;

myNetwork.send(String.fromCharCode(x)); //sends 11010000 , also known as Ð

解码

var receivedString = "Ð";

var decodedNum = receivedString.charCodeAt(0); //208

提到的字符串方法是24位,而这只是8位。

这种方法的缺点是,如果你想要小于字节大小的值,显然会有一些浪费。例如,您应该能够以9位存储512个值,但是您将被强制最多16位(2个字节),这是65,535个值,因为在unicode字符中都是字节大小的。但是,如果您将使用全部值,那就没问题了。