Convertendo xor, shr e shl de Delphi para PHP

O que ando aprendendo nesta caminhada sobre a Terra

Convertendo xor, shr e shl de Delphi para PHP

Estou migrando um software feito em Delphi para PHP e me deparei com um problema em uma maldita bendita função de criptografia.

Sofri um bocado tentando reescrever a função não pela complexidade do código e sim com as diferenças nos resultados.

A função faz uso dos operadores XOR e SHR na versão Delphi. O SHR foi relativamente fácil graças a experiência com operadores bit a bit e como a documentação do Delphi diz que o operador retira bits à direita de um número inteiro (como se percebe uma abreviação de SHift Right e o inverso é o operador SHL ; SHift Left) fiz testes usando o operador >;>; e acertei de primeira.

Já o operador XOR foi mais complicado. O PHP possui este operador e não me dei o trabalho de me certificar se ambos fazem a mesma coisa. Só quando fiz alguns testes usando diferentes inteiros é que pude perceber que não dão resultados iguais. No Delphi ele sempre retornava algum número enquanto em PHP ele retornava 1 ou 0 (na verdade true ou false).

Só quando li a documentação de ambas as linguagens percebi que são diferentes. No Delphi XOR é uma operação de comparação exclusiva (OR exclusivo) que retorna verdadeiro ou falso OU uma operação bit a bit de dois argumentos. No PHP XOR é apenas um operador para OR exclusivo. Ele não faz a operação de ajustes nos bits. O equivalente neste caso é o operador ^ (circunflexo).

Mais um aprendizado. Espero que ajude mais alguém algum dia.

Segue alguns links úteis.

http://php.net/manual/pt_BR/language.operators.bitwise.php

http://www.delphibasics.co.uk/RTL.asp?Name=xor

 ;

One Response

  1. Gabriel Bonissoni diz:

    cara…. eu tava me batendo usando o xor no php…. mudei para ^ e deu tudo certo. obrigado pela ajuda 😀

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.