È possibile generare una permutazione specifica di un array con una macro in C?Permutazioni di array C con macro
cioè Se ho una matrice X con gli elementi:
0 1 2 3 4 5
x = ["0","1","1","0","1","0"]
Stavo pensando ci può essere qualche foo macro per qualcosa di simile:
#define S_2Permute(x) = [x[5], x[3], x[4], x[2], x[1]]
dove ho ridefinire l'ordine dell'array , quindi l'elemento nella posizione originale 5 è ora nella posizione 0.
Qualche idea?
USO ESEMPIO
Sto iniziando a creare un'implementazione dell'algoritmo di crittografia DES. DES richiede parecchie permutazioni/espansioni in cui dovrei riordinare tutti gli elementi dell'array, a volte riducendo l'array e talvolta espandendolo. Speravo di essere in grado di definire una macro per permutare gli array per me.
EDIT2
Bene in DES il primo passo è una cosa chiamata permutazione iniziale. Così inizialmente ho qualche chiave a 64 bit, che per questo esempio può essere 0-15 esadecimale:
ABCDEF
che si espande a:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
IP (permutazione iniziale) sarebbe permutare questa stringa in modo che ogni elemento della matrice si troverebbe in una nuova posizione:
IP =
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
Così il nuovo primo elemento della bitstring sarebbe l'elemento di 58 ° (bit) dal bitstring originale.
così avrei tutti questi bit memorizzati in un array di caratteri:
x = [0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,
1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1]
e poi basta chiamare
IP_PERMUTE(x);
E macro magia si sono spostati tutti i bit nel nuovo posizioni corrette
Non sono sicuro di averlo capito. Potresti fornire un esempio di come vorresti utilizzarlo? –
@GregHewgill sicuro, ho aggiunto quello per cui spero di usarlo. –
Stavo pensando più ad un esempio di codice. Come * esattamente * apparirebbe il tuo codice e quale parte sostituirebbe la macro? –