#include <stdio.h>
#define L 40
void jiaM(int * s,int * a,int *b,int *sy);
void jieM(int * a,int *b,int *sy);
int main()
{
int s[L]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
// int s[L]={1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0};
int a[L/],b[L/],sy[L/];
jiaM(s,a,b,sy);
jieM(a,b,sy);
printf("\n");
return ;
}
void jiaM(int * s,int * a,int *b,int *sy)
{
int i=,j=,k=;
for(;i<L;i+=,j+=)
{
if(s[i]!=s[j]){sy[k++]=;}
else{sy[k++]=;}
} for(i=;i<L;i++)
{printf("%d",s[i]);}
printf("----´òÓ¡Ô´----\n"); for(i=;i<L/;i++)
{printf("%d ",sy[i]);}
printf("----´òÓ¡sy----\n"); int a1=,b1=;
for(k=,i=,j=;i<L;i+=,j+=)
{
if(sy[k++])
{
if(s[i]!=)
{
b[b1++]=;
}else
{
b[b1++]=;
}
}
else
{
if(s[i]!=)
{
a[a1++]=;
}else
{
a[a1++]=;
}
}
} for(i=;i<L/;i++)
{if(a[i]==||a[i]==)printf("%d ",a[i]);}
printf("----´òÓ¡a----\n"); for(i=;i<L/;i++)
{if(b[i]==||b[i]==)printf("%d ",b[i]);}
printf("----´òÓ¡b----\n"); } void jieM(int * a,int *b,int *sy)
{
int s[L],l=,m=,x=,y=,k,j;
for(k=,j=;k<L/;k++,l+=,m+=)
{
if(sy[k])
{
if(b[x++])
{
s[l]=;
s[m]=;
}
else
{
s[l]=;
s[m]=;
}
}
else
{
if(a[y++])
{
s[l]=;
s[m]=;
}
else
{
s[l]=;
s[m]=;
}
}
} for(j=;j<L;j++)
{
printf("%d",s[j]);
}
}
对二进制数据进行处理,生成索引(sy)和存储文件(a,b),其长度(源长度=sy+a+b,sy=a+b),索引很好推出,本来打算进行二进制压缩的,但没有想出好的办法。