经过哈夫曼编码后的文章,如何控制每一个bit输出到二进制文件

57_Viking 2015-11-28 10:04:55
如题,主要是想实现文件的压缩存储。经过哈夫曼编码的文章。每一个字母都有了长度不同的二进制表示码。现在想控制每一个bit的输出。比如0代表a,10代表b,110代表c,1110代表d。文章如cabbac,我想输出110010100110到二进制文本中,而不是补齐8位的一个字节再输出。
...全文
392 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-11-29
  • 打赏
  • 举报
回复
可以移位 哈夫曼编码,第一步 把码表写入文件 接着才是文件的哈夫曼 编码 码表写入后, 读取原文,按表读取编码c和位数b。 剩余编码r,移位b 位, 把编码c 或到r上 够8bits 则取走8 bit 剩余位数保留在r上 哈夫曼编码是前缀码,每个原文代码(通常为一个字符),被编成一定位数的,一定编码的哈夫曼码。 所以可以用原文作索引,查找哈夫曼表,一一对译。 哈夫曼表的生成,才是哈夫曼编码,最精致,最核心,最关键的内容。 关系到压缩率的大小。
57_Viking 2015-11-29
  • 打赏
  • 举报
回复
引用 5 楼 lm_whales 的回复:
待编码数据 a[N]; 编码余项 r 逐次取a[i] 编码到r后面,r够 8Bits储存之不够继续下一轮处理 如此即可 最后剩下 r 补齐输出
我也想过这个方法,但是要读出原文,能一个一个bit读吗? 还有,能不能麻烦给出实现这个操作bit的方法代码?谢谢
lm_whales 2015-11-29
  • 打赏
  • 举报
回复
待编码数据 a[N]; 编码余项 r 逐次取a[i] 编码到r后面,r够 8Bits储存之不够继续下一轮处理 如此即可 最后剩下 r 补齐输出
lm_whales 2015-11-29
  • 打赏
  • 举报
回复
够8Bit就输出,不够就继续处理下一批数据, 最后一个数据,补齐即可
57_Viking 2015-11-29
  • 打赏
  • 举报
回复
我的主要问题是如何控制bit的输出到文件中,比如二进制码是100,没有到8位,我也不想补齐8位成为char类型输出。就想只是输出二进制码100到二进制文件中。为的是节约内存空间(相当于压缩文件)。就这个怎么实现。求大神帮忙解决
paschen 2015-11-28
  • 打赏
  • 举报
回复
你需要哪几个位上的值, 就让该数与 需要的位为1、其他位为0的一个数做AND运算,然后将结果移位后就是你需要的数了
lm_whales 2015-11-28
  • 打赏
  • 举报
回复
查表就可以了

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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