DES 加密 的启发:如何把给数组向给定新的下标数组转化
动态查找:基于数据交换和目标位置的动态查找
int P[32]={
16, 7, 20, 21, 29,12, 28, 17,
1,15, 23, 26, 5,18, 31, 10,
2, 8, 24, 14, 32,27, 3, 9,
19,13, 30, 6, 22,11, 4, 25
};
int P_init[32]={
1, 2,3, 4, 5, 6, 7, 8,
9, 10, 11, 12,13,14,15, 16,
17, 18,19, 20,21,22,23, 24,
25,26,27, 28,29,30,31, 32
};
int data[32]={
0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3
};
void PRINT(int *a,int horiztonals,int columns ) ;
//void SWAP_P(int *P_init/*K[32]*/,int * P/*P[32]*/);
void SWAP_P(int *data/*data[32]*/,int* P_init/*P_init[32]*/,int* P/*P[32]*/);
#include<stdio.h>
int main()
{
PRINT(data,4,8);
printf("/n");
// PRINT(P_init,8/*horiztonals*/,4/* columns 8*/) ;
// printf("/n");
// SWAP_P(P_init,P);
SWAP_P(data/*data[32]*/,P_init/*P_init[32]*/, P/*P[32]*/);
// PRINT(P_init,8/*horiztonals*/,4/* columns 8*/) ;
//printf("/n");
PRINT(P,4,8);
printf("/n");
PRINT(data,4,8);
getchar();
return 0;
}
//------------------------------------------------------------------
///void SWAP_P(int* P_init/*K[32]*/,int* P/*P[32]*/)
void SWAP_P(int *data/*data[32]*/,int* P_init/*P_init[32]*/,int* P/*P[32]*/)
{
int i_start=0;
int i_end=0;
int temp=0;
int dat=0;
for(i_start=0,i_end=32;i_start!=i_end;i_start++)
{
//---------search for right P-------
temp=P[i_start];
printf("/ni_start=%d P[i_start]=%d/n",i_start+1 ,temp );
while(P_init[temp-1]!=P[i_start])
{
temp=P_init[temp-1];
}
//--------P_init[i] value swap and P[i] swap ------------
// Post swap[]
dat=P_init[i_start];
P_init[i_start]=P_init[ temp-1 ]; //be careful , data may be flowed out!
P_init[ temp-1 ]=dat;
// Post swap[] end
/*
printf("/n %4d %4d /n",temp ,P_init[temp-1]);
PRINT(P_init,8/*horiztonals*/,4/* columns 8*/)
*/
//value data[32] swap
dat=data[ i_start ];
data[ i_start ]=data[ temp-1 ];
data[ temp-1 ]=dat;
//data[] swap end
/*
PRINT(data,4,8);
intf("/n");
getchar();
*/
}
}
void PRINT(int *a,int horiztonals,int columns )
{
int horizontal=0;
int column=0;
for( horizontal=0;horizontal!=horiztonals;horizontal++)
for( column=0;column!=columns ;column++)
{ if((horizontal*columns+column)%columns==0)printf("/n");
printf("%4d ",a[horizontal*columns+column]);
}
}