资源简介
利用C语言进行算术编码,并进行数据压缩,程序简单可用
代码片段和文件信息
/*实现算术编码
*编码存储在code[bit_num]中
*
*/
#include “myfun.h“
char* ArCode(u_cell U[n]char code[m])
{
int ijbit_numt;
float tmp;
printf(“Input the %d data and weights:\n“n);
for(i=0;i {
scanf(“ %c“&U[i].data);
scanf(“ %f“&U[i].weight);
if(i==0) U[i].distr=0;
else U[i].distr=U[i-1].distr+U[i-1].weight;
}
char b;
float distr_F=0p=1;
printf(“Input your codes which are ended by $\n“);
scanf(“ %c“&b); //输入被编码序列
while(b!=‘$‘)
{
j=check_num(b);
distr_F=distr_F+p*U[j].distr; //计算被编码序列的分布
p=p*U[j].weight; //计算被编码序列的概率
scanf(“%c“&b);
}
printf(“the distribution is %f\n“distr_F);
tmp=-log2(p);
if((tmp-(int)tmp)!=0) bit_num=(int)tmp+1;//计算码长
else bit_num=(int)tmp;
printf(“the whole number of code is %d\n“bit_num);
tmp=2*distr_F;
// char code[bit_num]; //存储编码
for(i=0;i {
t=(int)tmp;
code[i]=t+‘0‘; //code[i]存储的字符型
tmp=2*(tmp-t);
printf(“%c“code[i]);
}
code[i]=‘\n‘; //数组code[]结束
for(;i {
printf(“%c“code[i]);
}
return code;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1550 2012-06-15 20:55 ArithmeticCode\ArCode.c
文件 1254 2012-06-15 20:56 ArithmeticCode\ArithmeticCode.cbp
文件 398 2012-06-15 20:50 ArithmeticCode\ArithmeticCode.depend
文件 538 2012-06-18 18:50 ArithmeticCode\ArithmeticCode.layout
文件 32677 2012-06-15 20:53 ArithmeticCode\bin\Debug\ArithmeticCode.exe
文件 317 2012-06-15 20:32 ArithmeticCode\check_num.c
文件 227 2012-06-15 20:50 ArithmeticCode\main.c
文件 370 2012-06-15 20:50 ArithmeticCode\myfun.h
文件 3699 2012-06-15 20:53 ArithmeticCode\obj\Debug\ArCode.o
文件 2663 2012-06-15 20:50 ArithmeticCode\obj\Debug\check_num.o
文件 2480 2012-06-15 20:50 ArithmeticCode\obj\Debug\main.o
目录 0 2012-06-15 20:53 ArithmeticCode\bin\Debug
目录 0 2012-06-15 20:53 ArithmeticCode\obj\Debug
目录 0 2012-06-15 17:09 ArithmeticCode\bin
目录 0 2012-06-15 17:09 ArithmeticCode\obj
目录 0 2012-06-18 18:50 ArithmeticCode
----------- --------- ---------- ----- ----
46173 16
- 上一篇:fastMatch的c++实现(需要opencv支持)
- 下一篇:C++ 数据采集
评论
共有 条评论