C语言霍夫曼编码压缩,霍夫曼压缩编码有关问题

霍夫曼压缩编码问题

如何将霍夫曼编码01序列以8BIT形式存储

------解决方案--------------------

这里有一篇关于霍夫曼编码的文章,楼主可以参考

------解决方案--------------------

仅供参考//有一个二进制文件,要求每隔50bits,删除后面的12bits。

#include 

#include 

#include 

FILE *fi,*fo;

char buf[31];

char obf[31];

int bn,n;

void filter() {//对buf中前n个字节中的位,每隔50bits,忽略12bits,结果放在obf中,且将bn设置为obf中的字节数。

char bit[249];

char obt[249];

char b8[33];

char b88[33];

int i,j;

char *e;

for (i=0;i

_itoa(buf[i],b8,2);

sprintf(b88,"%032s",b8);

sprintf(bit+i*8,"%s",b88+24);

}

j=0;

for (i=0;i

if (i%62<50) {

obt[j]=bit[i];

j++;

}

}

if (j%8) {

bn=(j/8+1)*8;

} else {

bn=j;

}

for (i=j;i

obt[bn]=0;

bn=bn/8;

for (i=0;i

strncpy(b8,obt+i*8,8);b8[8]=0;

obf[i]=(char)strtol(b8,&e,2);

}

}

int main() {

fi=fopen("in.bin","rb");

if (NULL==fi) {

printf("Can not open file in.bin!\n");

return 1;

}

fo=fopen("out.bin","wb");

if (NULL==fo) {

fclose(fi);

printf("Can not open file out.bin!\n");

return 2;

}

while (1) {

n=fread(buf,1,31,fi);

if (0==n) break;

filter();

fwrite(obf,1,bn,fo);

}

fclose(fo);

fclose(fi);

return 0;

}

------解决方案--------------------

引用:将转化的编码写入硬盘文件中,例如源文件名为qq.doc,压缩后命名为qq.doc.zip

就当做普通的二进制文件写就好了,名字都是自己定的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值