支持BINARY数据的javascript压缩算法?

She*_*man 5 javascript compression algorithm binary encoding

我在javascript中寻找一种无损压缩算法(例如LZW或Huffman或其他任何东西),该算法可以接收并返回原始的二进制数据。

“二进制数据”是指字节序列,它可以采用以下任何一种形式:

  • 包含从0到255之间的任何值的字符的字符串
  • 一个包含整数的数组,该整数的值介于0到255之间
  • 包含数据的十六进制表示形式的字符串(即,每个字节2个十六进制数字)
  • 包含数据的base64编码表示形式的字符串
  • 或其他任何可以明确转换为上述任何内容的内容

现在很明显,到处都有大量的javascript实现,可用于多种算法。但是我发现的所有东西似乎都在做疯狂的事情,例如:

  • 返回的数组还包含大于255的值(那么现在的压缩率是多少?如何以字节为单位表示它,或者如何将其保存到文件中?)

  • 弄乱字符串中的字符编码,从/转换为unicode或url / html实体或诸如此类(这是BINARY,此处不应用字符编码!)

  • 返回其他似乎不适合二进制存储的表示形式(即无法转换为字节序列)

谁会知道适合我的二进制恋物癖的良好javascript压缩(+ decompression)实现?

Das*_*arp -3

首先创建一个闭包来保存二进制或十六进制或十进制标志

function ASearch() { }
ASearch.Flag = {
    Front_Wheel_Drive: 0xF, Rear_Wheel_Drive: 0xF0, Four_Wheel_Drive: 0xF00,
    Auto: 0xFF, Manual: 0xFF00,
    Gas: 0xF, Diesel: 0xF0, Hybrid: 0xF00, Electrical: 0xF000,
    Two: 1, Three: 2, Four: 4, Five: 8, Six: 16, Eight: 32, Ten: 64, Twelve: 128
};
Run Code Online (Sandbox Code Playgroud)

然后像这样设置

SetFlag = (function (e) {
   e = e.srcElement;
   $("#" + e.parentNode.name).val(e.checked ?
        $("#" + e.parentNode.name).val() | ASearch.Flag[e.id] :
        $("#" + e.parentNode.name).val() ^ ASearch.Flag[e.id]);
});
Run Code Online (Sandbox Code Playgroud)

这是 32 位整数打包数据的示例

有四个变量...我已经将它们用于 18 个标志..这是快速且超级有效的

例如...

int i = 0; //binary = 0000 0000 0000 0000

i = i | 255; //binary = 0000 0000 1111 1111

i = i ^ 255; //binary = 0000 0000 0000 0000

i = i | 0xFF00; //binary = 1111 1111 0000 0000

i = i | 255; //binary = 1111 1111 1111 1111

i = i ^ 0xFF00; //binary = 0000 0000 1111 1111
Run Code Online (Sandbox Code Playgroud)