- 512 名前:七誌饅頭 ◆Pc9801rE [02/07/20 17:23]
- 静的RangeEncoderです
encode inputfile outputfileとして使ってください。 unsigned longのかわりにsize_tを使うなど、外道なことをしています。 #include <stdio.h> size_t l=0,r=0xffffffff,z,u[257];unsigned char f[256];main(int a,char**v){FILE *n=fopen(v[1],"rb"),*o=fopen(v[2],"wb");int i,c;fseek(n,0,2);z=ftell(n);fwrite (&z,4,1,o);fseek(n,0,0);while((c=fgetc(n))!=-1)if(f[c]!=255)f[c]++;for(i=0;i< 256;i++)u[i+1]=u[i]+f[i];fwrite(f,1,256,o);fseek(n,0,0);while((c=fgetc(n))!=-1 ){r/=u[256];l+=u[c]*r;r*=f[c];while((l^l+r)<1<<24||r<1<<16&&((r=65535&~l+1),1) ){fputc(l>>24,o);r<<=8;l<<=8;}}for(i=0;i<4;i++){fputc(l>>24,o);l<<=8;}}
|

|