假设我有一些数字,比如
5,10,7,8,9,6,2,4,8,5,3,9,78,5,6我需要将它发送到另一台计算机,但作为可能的最小字节数。我知道有一种方法可以做到这一点,我只是忘记了它的名称和工作原理,但通常会用这些数字做一些数学计算,得到一个大数字,然后从这个数字中导出数据,并从这个数字中获得这个数字。提前谢谢。
编辑OK,所以我需要在UDP中发送此文本,但我需要尽可能少的比特。我发送了一些选项,比如firstcolor- some颜色,假设我有15种颜色。每种颜色都是数字,从1到199,但也许有更好的方法来发送这些数据?谢谢。
发布于 2011-07-17 05:39:37
没有人能说出哪种压缩方案最适合你。我们没有任何关于这些数字的信息。但作为第一次尝试,您可以将它们写入一个文件并对其使用gzip压缩。或者bzip2,或者7zip。
只有当所有这些都不起作用时,你才应该考虑自己做压缩。
你也没有告诉我们你的操作系统(源计算机,目标计算机)以及你从哪里获得数据。
根据问题中的编辑进行更新:基本上,您希望发送范围在1到199之间的一些数字。这与单个byte可以容纳的内容非常接近。
如果每个数字使用8位是可以的(意味着每个数字浪费0.4位),这是微不足道的,但在很大程度上取决于编程语言。下面是它在Java语法中的样子:
ByteBuffer buf = new ByteBuffer();
buf.add(1);
buf.add(199);
buf.add(78);
buf.add(7);
udpSocket.send(buf.toArray());发布于 2011-07-17 05:47:39
获取一个压缩库(例如zlib )并输入您的数字(例如,以整数数组的形式)。这是在压缩你的数据。同样的库应该允许您反转过程并解压缩另一端的数据,以获得您的值。
如果你想提高你的算法知识,并且你的需求是简单和非关键的,我建议你尝试编写你自己的压缩/解压缩代码。如果没有,从架子上拿一些代码--周围有很多好的库。
https://stackoverflow.com/questions/6720374
复制相似问题