现有一堆二进制数据大多数内容为0x00和0xff,求一种压缩算法对该数据进行压缩使其占用空间最小

lucky-lucky 2014-06-03 08:14:49
数据如下:

root@primary:~/ci/cmake# xxd -l 512 series_peer_input_frame
0000000: 0200 eb4c 9400 0000 cc8c 8253 27d3 0c00 ...L.......S'...
0000010: 0000 0000 0d94 0005 0001 0001 0000 0094 ................
0000020: 0000 00ff ffff ff04 0104 0100 0400 0000 ................
0000030: 0000 0000 0000 0000 ffff ffff cc33 0000 .............3..
0000040: 0000 0000 0000 0000 0000 0000 ffff ffff ................
0000050: ffff 0000 0d95 0050 0000 0000 0000 0095 .......P........
0000060: 0000 00ff ffff ff04 0104 0100 0600 0000 ................
0000070: 0000 0000 0000 0000 ffff ffff cc33 0000 .............3..
0000080: 0000 0000 0000 0000 5500 0000 0100 ffff ........U.......
0000090: ffff 0000 0d95 0054 0003 0003 0000 0095 .......T........
00000a0: 0000 00ff ffff ff08 0108 0100 0700 0000 ................
00000b0: 0000 0000 0000 0000 ffff ffff cc33 0000 .............3..
00000c0: 0000 0000 0000 0000 5500 0000 0100 ffff ........U.......
00000d0: ffff 0000 0d94 004f 0002 0002 0000 0094 .......O........
00000e0: 0000 00ff ffff ff08 0108 0100 0500 0000 ................
00000f0: 0000 0000 0000 0000 ffff ffff cc33 0000 .............3..
0000100: 0000 0000 0000 0000 0000 0000 ffff ffff ................
0000110: ffff 0000 0d96 000a 00f1 0005 0000 0096 ................
0000120: 0000 00ff ffff ff0c 010c 0100 0400 0000 ................
0000130: 0000 0000 0000 0000 ffff ffff cc33 0000 .............3..
0000140: 0000 0000 0000 0000 0000 0000 ffff ffff ................
0000150: ffff 0000 0dfd 0000 00f0 0004 0000 0097 ................
0000160: 0000 00ff ffff ff0c 010c 0100 0600 0000 ................
0000170: 0000 0000 0000 0000 ffff ffff cc33 0000 .............3..
0000180: 0000 0000 0000 0000 0000 0000 ffff ffff ................
0000190: ffff 0000 0d98 00f2 0008 00ff ffff ff98 ................
00001a0: 0000 00ff ffff ff04 0604 0600 0700 0000 ................
00001b0: 0000 0000 0000 0000 ffff ffff cc33 0000 .............3..
00001c0: 0000 0000 0000 0000 5500 0000 0000 ffff ........U.......
00001d0: ffff 0000 0d99 0056 00f4 0008 0000 0099 .......V........
00001e0: 0000 00ff ffff ff08 0608 0600 0400 0000 ................
00001f0: 0000 0000 0000 0000 ffff ffff cc33 0000 .............3..
root@primary:~/ci/cmake#

...全文
361 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2014-06-05
  • 打赏
  • 举报
回复
compress gzip bzip2 随便用
lucky-lucky 2014-06-05
  • 打赏
  • 举报
回复
这个数据是从内存里面dump出来的,我们需要在程序里面实现相应的压缩与解压,gzip等现成的压缩程序使用了动态内存,而我们的程序要求不能使用动态内存,所以只能自己实现。 再次感谢大家
千树之影 2014-06-04
  • 打赏
  • 举报
回复
哈夫曼+游程
赵4老师 2014-06-04
  • 打赏
  • 举报
回复
直接用zip库即可。
碼上道 2014-06-04
  • 打赏
  • 举报
回复
如果数据量不大,直接使用zip就可以了, 如果数据量非常大,就可以自己设计算法了。 应该说你的数据内为大多数的0x00,0xff,这样分还行,你的数据有很多重复的行。或者有0000 ffff,这样的,要当成元数据,也就是自己要提取相同的部分。
lucky-lucky 2014-06-04
  • 打赏
  • 举报
回复
引用 3 楼 anshiny 的回复:
一搜一大把。
压缩算法也有很多种,有损压缩,无损压缩,视频压缩,文字压缩等等,想要压缩效率最高,这也算是一道算法题了
lucky-lucky 2014-06-04
  • 打赏
  • 举报
回复
shiter 2014-06-04
  • 打赏
  • 举报
回复
就哈夫曼吧,估计还比较简单
sevancheng 2014-06-04
  • 打赏
  • 举报
回复
哈夫曼 编码
jmppok 2014-06-04
  • 打赏
  • 举报
回复
直接用现有的开源压缩库即可 相信我:无论你怎么写,也不如他们提供的好用。
gz_qmc 2014-06-04
  • 打赏
  • 举报
回复
引用 1 楼 anshiny 的回复:
用行程编码算法。
++++++++++++++++++++
anshiny 2014-06-03
  • 打赏
  • 举报
回复
一搜一大把。
lucky-lucky 2014-06-03
  • 打赏
  • 举报
回复
引用 1 楼 anshiny 的回复:
用行程编码算法。
very thanks,是否有现成的demo可以参考呢
anshiny 2014-06-03
  • 打赏
  • 举报
回复
用行程编码算法。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧