|
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
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 |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
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 |
#5
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|