MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   XOR en ABAP (foro/showthread.php?t=35545)

Ariel-StaFe 09/03/10 14:11:30

XOR en ABAP
 
Estimados:
Tengo que resolver un algoritmo de encriptación que me solicitan, donde utilizan el XOR entre dos nros enteros (de 3 digitos).
Como puedo resolverlo en ABAP ?.
He probado con el BIT-XOR pero requiere que los campos sean del tipo X o XSTRING y no me da el resultado esperado.
Alguien me podria dar una idea ?
Desde ya muchas gracias.
Ss

Ariel-StaFe 09/03/10 16:15:57

XOR en ABAP - Resuelto
 
Bueno, habia que probar.
Por si alguien lo necesita.
Asignar las variables enteras a variables de tipo XSTRING
Hacer el BIT-XOR con las variables XSTRING,
El resultado (en otra var xstring) asignarlo a una variable entera y listo.
Ss

Ariel-StaFe 09/03/10 17:45:07

XOR en ABAP - Reabierto
 
Estimados:
Lamentablemente no es la solución, ya que hay casos donde no funciona de esa manera.
Por lo que si alguien tiene otra respuesta o salida para esto se lo agradeceré
Ss

abapedro 12/03/10 03:18:45

Funcion para implementar XOR de enteros
 
Hola Ariel-Stafe,

Me pareció interesante el reto del XOR y creé una función que lo implementa:

FUNCTION ZXOR.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(ZNUMA) TYPE INTEGER
*" REFERENCE(ZNUMB) TYPE INTEGER
*" EXPORTING
*" REFERENCE(ZNUMC) TYPE INTEGER
*"----------------------------------------------------------------------

data: z_int type integer.
data: z_potencia type integer.
data: z_numa type integer.
data: z_numb type integer.


z_int = 9.
znumc = 0.
z_numa = znuma.
z_numb = znumb.

do 10 times.

z_potencia = 2 ** z_int.
if ( z_numa ge z_potencia ) and ( z_numb ge z_potencia ).
z_numa = z_numa - z_potencia.
z_numb = z_numb - z_potencia.
elseif ( z_numa ge z_potencia ).
z_numa = z_numa - z_potencia.
znumc = znumc + z_potencia.
elseif ( z_numb ge z_potencia ).
z_numb = z_numb - z_potencia.
znumc = znumc + z_potencia.
endif.
z_int = z_int - 1.

enddo.

ENDFUNCTION.

Seguramente se puede pulir un poco, pero así opera bien hasta donde entiendo.

Como puede observar, esta hecha para números de solo 3 cifras. Si se quisiera utilizar para números mayores que 1023, habría que pasar el z_int a 10 (o a mayor valor) e igualmente el "do" sería "do 11 times", etc.

Espero que le sirva.

Abapedro

Ariel-StaFe 16/03/10 17:53:05

Que tal ?
Groso lo tuyo Abapedro...
Ya lo habia podido resolver, en realidad el BIT-XOR actua perfecto pero se agradece y tendré en cuenta tu función para cualquier otra oportunidad.
Saludos


Husos Horarios son GMT. La hora en este momento es 03:33:54.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web