设:sInit[] = {A,E,D,B,F,C,G};
置换函数为: int perm[] = {3,4,6,2,1,5,7},也就是将sInit数据中的第3个数据放在sInit的第1位,将第4个数据放在sInit的第2位...以此类推..
最好加上:
if ( i != perm[i - 1] )
{
//...置换
}
个人以为,如果sInit数组不是很大的话,可以考虑用一个临时数组来存储原来数组值,这样程序思路会更清晰些
bool permute(unsigned char *sInit,unsigned int *perm,int nLen)
{
unsigned char *temp = new unsigned char[nlen+1];
register int i,j;
strcpy(temp, sInit);
for(i=0; i<nLen; i++)
sInit[i] = temp[perm[i]];
delete[] temp;
return true;
}
也许楼主程序另有要求