¿Es posible generar una permutación específica de una matriz con una macro en C?permutaciones de matriz C con macros
es decir, Si tengo una matriz X de elementos:
0 1 2 3 4 5
x = ["0","1","1","0","1","0"]
estaba pensando puede haber algo de foo macro para algo como esto:
#define S_2Permute(x) = [x[5], x[3], x[4], x[2], x[1]]
donde redefinir el orden de la matriz , entonces el elemento en la posición original 5 ahora está en la posición 0.
¿Alguna idea?
Ejemplo de
estoy empezando a crear una implementación del algoritmo de cifrado DES. DES requiere varias permutaciones/expansiones en las que tendría que volver a ordenar todos los elementos en la matriz, a veces reduciendo la matriz y, a veces, expandiéndola. Esperaba poder definir una macro para permutar las matrices por mí.
Edit2
bien en DES el primer paso es algo que se llama la permutación inicial. Así que al principio tengo algo de clave de 64 bits, lo que para este ejemplo puede ser hexagonal 0-15:
ABCDEF
que se expande a:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
El IP (permutación inicial) iba a permutar esta cadena por lo que cada elemento de la matriz estaría en una nueva posición:
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
Así que la nueva primera elemento de la cadena de bits sería el elemento 58a (bits) de la cadena de bits originales.
por lo que tendría todos estos bits almacenados en una matriz de caracteres:
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]
y luego a llamarlo
IP_PERMUTE(x);
Y macro magia se habrá movido todos los bits en el nuevo posiciones correctas.
No estoy seguro de obtenerlo. ¿Podría darnos un ejemplo de cómo le gustaría usar esto? –
@GregHewgill seguro, agregué lo que con suerte usaré para esto. –
Estaba pensando más en un ejemplo de código. ¿Cómo * exactamente * se vería su código, y qué parte reemplazaría la macro? –