【发布时间】:2013-01-13 23:21:11
【问题描述】:
我需要以尽可能少的数据量将以下内容转换为二进制格式(以及后来的恢复)。
my_arr = [
[128,32 ,22,23],
[104,53 ,21,25],
[150,55 ,79,23],
[104,101,23,8 ],
[57 ,117,13,21],
[37 ,135,21,20],
[81 ,132,23,6 ],
[81 ,138,7 ,8 ],
[97 ,138,7 ,8 ]...
数字不超过 399
如果我对每个数字使用 0(连续 8 个 0 = 8)并使用 1 作为分隔符,则第一行如下所示: 010010000000011000100110010011001000 这对于像 99 这样的数字来说真的很长
如果我将每个数字填充为三位数字并将每个数字依次转换为实际二进制,则第一行如下所示: 000100101000000000110010000000100010000000100011 这相当于每个数字 12 个字符。
由于第一个字符永远不会是 4 或以上,我可以通过将 0 视为 00、1 视为 01、2 视为 10 和 3 视为 11 来节省两个数字。因此每个数字 10 个字符 总的来说,这会将大小减少到第一个选项的 90% 左右(平均),但有没有更短的方法?
编辑:是的,作为 1 和 0 的字符串...并且它不需要比原始整数短...只是仅使用 2 个符号的最短可能编写方式
【问题讨论】:
-
在 JavaScript 中,将整数视为二进制的唯一方法是将其放入
1s 和0s 的 String 中。字符串的每个字符将占用至少 8 位,这意味着与整数本身所需的内存相比,该字符串是巨大的。 -
当你说二进制时,你的意思是字面意思,只有数字 0 和 1 作为字符串,还是你的意思是,例如,你可以将 8 个 1 存储为值 0XFF?基本上与@Paul 相同的问题/评论,但措辞不同。