Thread XOR Frage (4 answers)
Opened by gh057 at 2009-07-27 16:34

Taulmarill
 2009-07-27 17:28
#123611 #123611
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
in $diff steht am Ende nicht mehr wirklich irgend etwas in einem gültigen "Format" (aka encoding). Hier werden nämlich nicht Zeichen miteinender per XOR verknüpft, sondern Bytes. Oft entspricht ein Byte einem Zeichen, aber eben nicht immer.

Das binäre "exklusive oder" (XOR) arbeitet so, dass es jedes Bit der beiden Strings vergleicht. Wenn die beiden Verglichenen Bits gleich sind, ergibt das 0, wenn sie verschieden sind 1. Daher kommt bei gleichen Bytes ein null-Byte (das ist das \0 im tr///) heraus.

Ich denke mal, dass die Zeile zwei so gemeint ist:
Code: (dl )
$diff =~ tr/\0//d

So wie das in deinem Beispiel steht, tut das bei mir nämlich nichts. Ein komplettes Programm, welches dir sagt, wie viele Bytes in einem String unterschiedlich sind, sähe z.B. so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use strict;
use warnings;

my $s1 = 'abcdefghijklmnopqrstuvwxyz';
my $s2 = 'abcdefghijklaaaaarstuvwxyz';

my $diff = $s1 ^ $s2;
$diff =~ tr/\0//d;

print length( $diff ) . "\n";
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B

View full thread XOR Frage