⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.txt

📁 图像处理程序,单片机嵌入式,FFT算法
💻 TXT
字号:
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <conio.h> 
struct head 
{ 
unsigned char b; /*the charactor*/ 
long count; /*the frequency*/ 
long parent,lch,rch; /*make a tree*/ 
char bits[256]; /*the haffuman code*/ 
} 
header[512],tmp; 

void compress() 
{ 
char filename[255],outputfile[255],buf[512]; 
unsigned char c; 
long i,j,m,n,f; 
long min1,pt1,flength; 
FILE *ifp,*ofp; 
printf("source filename:"); 
gets(filename); 
ifp=fopen(filename,"rb"); 
if(ifp==NULL) 
{ 
printf("source file open error!\n"); 
return; 
} 
printf("destination filename:"); 
gets(outputfile); 
ofp=fopen(outputfile,"wb"); 
if(ofp==NULL) 
{ 
printf("destination file open error!\n"); 
return; 
} 
flength=0; 
while(!feof(ifp)) 
{ 
fread(&c,1,1,ifp); 
header[c].count++; 
flength++; 
} 
flength--; 
header[c].count--; 
for(i=0;i<512;i++) 
{ 
if(header[i].count!=0) header[i].b=(unsigned char)i; 
else header[i].b=0; 
header[i].parent=-1; 
header[i].lch=header[i].rch=-1; 
} 
for(i=0;i<256;i++) 
{ 
for(j=i+1;j<256;j++) 
{ 
if(header[i].count<header[j].count) 
{ 
tmp=header[i]; 
header[i]=header[j]; 
header[j]=tmp; 
} 
} 
} 
for(i=0;i<256;i++) if(header[i].count==0) break; 
n=i; 
m=2*n-1; 
for(i=n;i<m;i++) 
{ 
min1=999999999; 
for(j=0;j<i;j++) 
{ 
if(header[j].parent!=-1) continue; 
if(min1>header[j].count) 
{ 
pt1=j; 
min1=header[j].count; 
continue; 
} 
} 
header[i].count=header[pt1].count; 
header[pt1].parent=i; 
header[i].lch=pt1; 
min1=999999999; 
for(j=0;j<i;j++) 
{ 
if(header[j].parent!=-1) continue; 
if(min1>header[j].count) 
{ 
pt1=j; 
min1=header[j].count; 
continue; 
} 
} 
header[i].count+=header[pt1].count; 
header[i].rch=pt1; 
header[pt1].parent=i; 
} 
for(i=0;i<n;i++) 
{ 
f=i; 
header[i].bits[0]=0; 
while(header[f].parent!=-1) 
{ 
j=f; 
f=header[f].parent; 
if(header[f].lch==j) 
{ 
j=strlen(header[i].bits); 
memmove(header[i].bits+1,header[i].bits,j+1); 
header[i].bits[0]='0'; 
} 
else 
{ 
j=strlen(header[i].bits); 
memmove(header[i].bits+1,header[i].bits,j+1); 
header[i].bits[0]='1'; 
} 
} 
} 
fseek(ifp,0,SEEK_SET); 
fwrite(&flength,sizeof(int),1,ofp); 
fseek(ofp,8,SEEK_SET); 
buf[0]=0; 
f=0; 
pt1=8; 
while(!feof(ifp)) 
{ 
c=fgetc(ifp); 
f++; 
for(i=0;i<n;i++) 
{ 
if(c==header[i].b) break; 
} 
strcat(buf,header[i].bits); 
j=strlen(buf); 
c=0; 
while(j>=8) 
{ 
for(i=0;i<8;i++) 
{ 
if(buf[i]=='1') c=(c<<1)|1; 
else c=c<<1; 
} 
fwrite(&c,1,1,ofp); 
pt1++; 
strcpy(buf,buf+8); 
j=strlen(buf); 
} 
if(f==flength) break; 
} 
if(j>0) 
{ 
strcat(buf,"00000000"); 
for(i=0;i<8;i++) 
{ 
if(buf[i]=='1') c=(c<<1)|1; 
else c=c<<1; 
} 
fwrite(&c,1,1,ofp); 
pt1++; 
} 
fseek(ofp,4,SEEK_SET); 
fwrite(&pt1,sizeof(long),1,ofp); 
fseek(ofp,pt1,SEEK_SET); 
fwrite(&n,sizeof(long),1,ofp); 
for(i=0;i<n;i++) 
{ 
fwrite(&(header[i].b),1,1,ofp); 
c=strlen(header[i].bits); 
fwrite(&c,1,1,ofp); 
j=strlen(header[i].bits); 
if(j%8!=0) 
{ 
for(f=j%8;f<8;f++) 
strcat(header[i].bits,"0"); 
} 
while(header[i].bits[0]!=0) 
{ 
c=0; 
for(j=0;j<8;j++) 
{ 
if(header[i].bits[j]=='1') c=(c<<1)|1; 
else c=c<<1; 
} 
strcpy(header[i].bits,header[i].bits+8); 
fwrite(&c,1,1,ofp); 
} 
} 
fclose(ifp); 
fclose(ofp); 
printf("compress successfully!\n"); 
return; 
} 
void uncompress() 
{ 
char filename[255],outputfile[255],buf[255],bx[255]; 
unsigned char c; 
long i,j,m,n,f,p,l; 
long flength; 
FILE *ifp,*ofp; 
printf("source filename:"); 
gets(filename); 
ifp=fopen(filename,"rb"); 
if(ifp==NULL) 
{ 
printf("source file open error!\n"); 
return; 
} 
printf("destination filename:"); 
gets(outputfile); 
ofp=fopen(outputfile,"wb"); 
if(ofp==NULL) 
{ 
printf("destination file open error!\n"); 
return; 
} 
fread(&flength,sizeof(long),1,ifp); 
fread(&f,sizeof(long),1,ifp); 
fseek(ifp,f,SEEK_SET); 
fread(&n,sizeof(long),1,ifp); 
for(i=0;i<n;i++) 
{ 
fread(&header[i].b,1,1,ifp); 
fread(&c,1,1,ifp); 
p=(long)c; 
header[i].count=p; 
header[i].bits[0]=0; 
if(p%8>0) m=p/8+1; 
else m=p/8; 
for(j=0;j<m;j++) 
{ 
fread(&c,1,1,ifp); 
f=c; 
itoa(f,buf,2); 
f=strlen(buf); 
for(l=8;l>f;l--) 
{ 
strcat(header[i].bits,"0"); 
} 
strcat(header[i].bits,buf); 
} 
header[i].bits[p]=0; 
} 
for(i=0;i<n;i++) 
{ 
for(j=i+1;j<n;j++) 
{ 
if(strlen(header[i].bits)>strlen(header[j].bits)) 
{ 
tmp=header[i]; 
header[i]=header[j]; 
header[j]=tmp; 
} 
} 
} 
p=strlen(header[n-1].bits); 
fseek(ifp,8,SEEK_SET); 
m=0; 
bx[0]=0; 
while(1) 
{ 
while(strlen(bx)<(unsigned int)p) 
{ 
fread(&c,1,1,ifp); 
f=c; 
itoa(f,buf,2); 
f=strlen(buf); 
for(l=8;l>f;l--) 
{ 
strcat(bx,"0"); 
} 
strcat(bx,buf); 
} 
for(i=0;i<n;i++) 
{ 
if(memcmp(header[i].bits,bx,header[i].count)==0) break; 
} 
strcpy(bx,bx+header[i].count); 
c=header[i].b; 
fwrite(&c,1,1,ofp); 
m++; 
if(m==flength) break; 
} 
fclose(ifp); 
fclose(ofp); 
printf("Uncompress successfully!\n"); 
return; 
} 
int main() 
{ 
int c; 
printf("1--Compress file\n"); 
printf("2--Uncompress file\n"); 
printf("Select 1 or 2:"); 
c=getch(); 
printf("%c\n",c); 
if(c=='1') compress(); 
else if(c=='2') uncompress(); 
return 0; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -