XOR en ABAP

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Ariel-StaFe
    Senior Member
    • nov
    • 321

    #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
    Ariel-StaFe
    Analista Programador Abap Senior
    Santa Fe Capital
    Pcia de Santa Fe
    Argentina
  • Ariel-StaFe
    Senior Member
    • nov
    • 321

    #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
    Ariel-StaFe
    Analista Programador Abap Senior
    Santa Fe Capital
    Pcia de Santa Fe
    Argentina

    Comentario

    • Ariel-StaFe
      Senior Member
      • nov
      • 321

      #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
      Ariel-StaFe
      Analista Programador Abap Senior
      Santa Fe Capital
      Pcia de Santa Fe
      Argentina

      Comentario

      • abapedro
        Member
        • mar
        • 83

        #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

        Comentario

        • Ariel-StaFe
          Senior Member
          • nov
          • 321

          #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
          Ariel-StaFe
          Analista Programador Abap Senior
          Santa Fe Capital
          Pcia de Santa Fe
          Argentina

          Comentario

          Trabajando...