这是代码,其实意思很简单,按照置换群的概念,既然{4,3,7,1,5,2,6,8}通过几次自身置换能变回本身,
那么应用与字符,应该也可以,所以就这样作了,结果发现最终的文件内容和当初的有些出入,应该是
程序有些问题,一下子没看出来就贴出来大家看看:这个应该可以引申,虽然没什么意思,好玩而已!
本身没有对代码作优化,欢迎大家批评指正!
#include<iostream>
#include<cmath>
using namespace std;
void change(const char a,int b[8])
{
    int temp;
    temp=(int)a;
    for(int i=0;i<8;i++)
    {
        b[7-i]=temp%2;
        temp/=2;
    }
}
char changeback(int b[8])
{
    int sum=0;
    for(int i=0;i<8;i++)
    {
        sum+=b[i]*pow(2,7-i);
    }
    return (char)sum;
}
int Key[8]={4,3,7,1,5,2,6,8};
void swap(int thechar[8])
{
    int temp[8];
    for(int i=0;i<8;i++)
    {
        temp[i]=thechar[i];
    }
    for(i=0;i<8;i++)
    {
        thechar[i]=temp[Key[i]-1];
    }
}
int Tr(char *filefrom,char *fileto)
{
    FILE *datafp,*datafp1;
    if((datafp=fopen(filefrom,"rt"))==NULL)
    {
        cout<<"cannot open!"<<endl;
        exit(1);
    }
    if((datafp1=fopen(fileto,"wt"))==NULL)
    {
        cout<<"cannot open!"<<endl;
        exit(1);
    }
    int theanswer[8];
    char temp;
    while(fscanf(datafp,"%c",&temp)!=EOF)
    {
        change(temp,theanswer);
        swap(theanswer);
        temp=changeback(theanswer);
        fprintf(datafp1,"%c",temp);
    }
    fclose(datafp);
    fclose(datafp1);
    return 0;
}
int main()
{
    char filename1[]="source";
    char filename2[]="temp";
    int times;
    for(times=0;times<4;times++)
    {
        Tr(filename1,filename2);
        strcpy(filename1,filename2);
        strcat(filename2,"2");
    }
    
    return 0;
}



											
	    

	



全局变量!