DES 启发:数组向目标位数组转化

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]);
   }
}

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值