Recent

Author Topic: XOR ¿Como?  (Read 1487 times)

mav

  • New Member
  • *
  • Posts: 44
XOR ¿Como?
« on: May 06, 2021, 07:16:08 pm »
Hola.¿Qué tal?
Tengo almacenada en una variable un numero indeterminado de enteros ( correspondientes a unos Char).
La pregunta es ¿Como puedo hacer 3 xor a estos enteros:
  Por ejemplo:
     
Code: Pascal  [Select][+][-]
  1.        Resul          : integer;
  2.       ResultNuevo  := Resul  xor $1234;
  3.       OtroResult    := ResulNuevo xor $5678;
  4.       ResultFinal    := OtroResult xor  $8901;

  Saludos
   ¿SE pueden hacer XOR anidados?

Edson

  • Hero Member
  • *****
  • Posts: 1160
Re: XOR ¿Como?
« Reply #1 on: May 06, 2021, 07:28:02 pm »
Hola.

No sé a qué te refieres con "anidados", pero podrías hacer ago así:

Code: Pascal  [Select][+][-]
  1.       ResultFinal := ((Resul  xor $1234) xor $5678) xor  $8901;
  2.  

Aunque la forma en que lo has escrito también funciona, y ayuda más en la depuración.
Lazarus 2.0.10 - FPC 3.2.0 - x86_64-win64 on Windows 8

mav

  • New Member
  • *
  • Posts: 44
Re: XOR ¿Como?
« Reply #2 on: May 06, 2021, 08:45:29 pm »
..si, se puede hacer así, pero como result es integer y es un número decimal, los operadores del xor los convertí a decimales
y la operación resultante es mayor en 1 al resultado que tendría que obtener (¿Será por alguna cuestión de redondeo?)
¿Cómo se soluciona esto?.
¿Cómo convierto ese result = integer,    (Número decimal) ,resultado de una operación, a Hexadecimal para probar si los xor con
hexadecimales dan el resultado correcto?
Si lo convierto con IntToHex obtengo =  Error: Operator is not overloaded: "AnsiString" xor "SmallInt", por eso operé con decimales
Saludos
« Last Edit: May 06, 2021, 10:12:25 pm by mav »

mav

  • New Member
  • *
  • Posts: 44
Re: XOR ¿Como?
« Reply #3 on: May 06, 2021, 10:30:14 pm »
..y una cuestión mas, la operación Xor, tiene que ser con signo,claro, porque el valor de resul puede ser negativo...(Culpa de las ññññ)
..o sea que el problema es convertir resul , a hexadecimal con signo.
« Last Edit: May 06, 2021, 10:33:33 pm by mav »

Edson

  • Hero Member
  • *****
  • Posts: 1160
Re: XOR ¿Como?
« Reply #4 on: May 06, 2021, 10:50:47 pm »
..y una cuestión mas, la operación Xor, tiene que ser con signo,claro, porque el valor de resul puede ser negativo...(Culpa de las ññññ)
..o sea que el problema es convertir resul , a hexadecimal con signo.

Me has dejado más confundido.

¿Qué tienen que ver las "ññññ"? ¿Es que estás codificando caracteres en un integer? ¿Para qué? ¿Qué deseas obtener con un XOR?
Lazarus 2.0.10 - FPC 3.2.0 - x86_64-win64 on Windows 8

mav

  • New Member
  • *
  • Posts: 44
Re: XOR ¿Como?
« Reply #5 on: May 06, 2021, 11:02:41 pm »
...resul es el resultado de sumar distintos caracteres ascii extendido, el resultado puede ser negativo porque por ejemplo
la ñ tiene el valor $A4 pero  es realmente $FFFF FFA4 con signo, es decir un valor negativo, pues bien el resultado de esta suma
de caracteres luego hay que hacer 3 xor, cuyo resultado tiene que ser con signo con lo que la cosa se complica....

Y lo que deseo obtener con esta operación de xor...estoy aprendiendo y para ello me pongo ejercicios, en este caso es un keygenme
de los muchos que circulan por ahí..como lo he resuelto ( con eso aprendo a "debugear"), ahora me queda por hacer el keygen y
como soy español quiro que se pueda poner la ñ tambien en el keygen..ademas de que cuanto mas dificultades te pongas..mas aprendes
aunque sea con ayuda..
Saludos

« Last Edit: May 06, 2021, 11:08:12 pm by mav »

Edson

  • Hero Member
  • *****
  • Posts: 1160
Re: XOR ¿Como?
« Reply #6 on: May 06, 2021, 11:32:41 pm »
...resul es el resultado de sumar distintos caracteres ascii extendido, el resultado puede ser negativo porque por ejemplo
la ñ tiene el valor $A4 pero  es realmente $FFFF FFA4 con signo, es decir un valor negativo, pues bien el resultado de esta suma
de caracteres luego hay que hacer 3 xor, cuyo resultado tiene que ser con signo con lo que la cosa se complica....

Después de hacer 3 XOR a cualquier valor, el resultado puede ser con signo o sin signo. Eso dependerá de:
1. El valor inicial
2. Los valores con los que le hagas el XOR.
3. Cómo interpretes el resultado.

No veo por qué tendrías que forzar a que el resultado sea con o sin signo.
Lazarus 2.0.10 - FPC 3.2.0 - x86_64-win64 on Windows 8

mav

  • New Member
  • *
  • Posts: 44
Re: XOR ¿Como?
« Reply #7 on: May 06, 2021, 11:57:44 pm »
..de acuerdo: ¿Como convierto el resul a hexadecimal, para no tener errores?
   Si lo convierto con IntToHex obtengo =  Error: Operator is not overloaded: "AnsiString" xor "SmallInt"los xor son los del
primer post.

Edson

  • Hero Member
  • *****
  • Posts: 1160
Re: XOR ¿Como?
« Reply #8 on: May 07, 2021, 12:43:34 am »
No tienes que convertir un "integer" a hexadecimal para hacer un XOR. De hecho no deberías. La conversión realizada por IntToHex() generará una cadena, y a las cadenas no se puede aplicar un XOR.

La conversión a hexadecimal se usa colo cuando se quiere mostrar un valor en formato hexadecimal.

Internamente las variables "integer" (y en realidad todas las variables) se almacenan de forma binaria y así se ven cuando se la aplica un XOR.

Cuando muestras ese variable (valor binario), es que se muestra en decimal (Lo que muestra un write(), o un writeln() ) o en hexadecimal, o en binario mismo si lo deseas.

Lazarus 2.0.10 - FPC 3.2.0 - x86_64-win64 on Windows 8

mav

  • New Member
  • *
  • Posts: 44
Re: XOR ¿Como?
« Reply #9 on: May 07, 2021, 01:24:19 am »
..de acuerdo, muchas gracias, he conseguido hacerlo funcionar, siempre que no utilice la ñ o algún otro caracter
ascii extendido...

mav

  • New Member
  • *
  • Posts: 44
Re: XOR ¿Como?
« Reply #10 on: May 07, 2021, 03:10:25 pm »
Todo hecho y soluccionado, funcionando, en tu respuesta 8 está la solución...
Gracias .Un saludo

 

TinyPortal © 2005-2018