Visualizzazione dei risultati da 1 a 3 su 3

Discussione: XOR logico

  1. #1
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691

    XOR logico

    Salve, premetto che sono operazioni che non ho mai fatto.

    Come posso fare uno XOR logico di questi dati con PHP?

    A = 9807162534435221
    A XOR con “AAAAAAAAAAAAAAAA” = 32ADBC8F9EE9F88B

    Dove A è il risultato di una permutazione circolare con dato di partenza
    1234567890123452.
    ...altri 5 anni di purga...

  2. #2
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    fatto!!

    gmp_strval(

    (gmp_xor(gmp_init('0x9807162534435221'),gmp_init(' 0xAAAAAAAAAAAAAAAA'))),

    16 )

    il 16 è perchè il risultato mi serviva in hex.
    ...altri 5 anni di purga...

  3. #3
    Stai superando i limiti numerici del PHP, quindi usando le normali funzioni otterrai errori di arrotondamento. Il formato floating del PHP (il più preciso) è di 8 bytes, di cui 1 è riservato a esponente e segno: i tuoi valori invece sono da 8 bytes, per cui sbaracchi.

    Per risolvere il tuo quesito si può usare la libreria gnu gmp, che esegue operazioni su interi a lunghezza arbitraria:

    Codice PHP:
    // Questo non funziona: i limiti del PHP vengono superati
    $a 0x9807162534435221;
    $b 0xaaaaaaaaaaaaaaaa;
    $c $a $b;
    echo 
    dechex($c) . "\n";

    // Questo funziona
    $a gmp_init('9807162534435221'16);
    $b gmp_init('aaaaaaaaaaaaaaaa'16);
    $c gmp_xor ($a$b);
    echo 
    gmp_strval($c16) . "\n"
    Come risultato otterrai:

    codice:
    32adbc8f9ee9f800
    32adbc8f9ee9f88b
    e il secondo è il risultato che richiedevi.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.