2012-04-26 65 views

回答

0

你可以寫,做一個位操作幾個功能:

sub xor 
{ 
    my $p = shift; 
    my $q = shift; 

    return ($p eq $q) "0" : "1"; 
} 

,那麼你可以成功地把這種每對字符(每個連續的位)。

for (my $index = 0; $index < inputLength; $index++) 
{ 
    $result = $result . xor (substr ($a, $index, 1), substr ($b, $index, 1)); 
} 

inputLength$a$b長度。 這是一種做法。希望這可以幫助!

1

使用此子程序:

sub bin2dec { 
    return unpack("N", pack("B32", substr("0" x 32 . shift, -32))); 
} 

將字符串轉換爲整數,並且可以使用它們的按位異或^,然後測試如果等於4

2

如果您在聲明

my $first = 0b10001; 
my $second = 0b10101; 

my $xored = $first^$second; 

if ($xored == 0b00100) 
{ 
    print "Good!"; 
} 

工程用數字和十六進制太:

01你自己,你可以使用一些文字信息
my $first = 21; # or 0b10101 or 0x15 
my $second = 0x11; # or 0b10001 or 17 

my $xored = $first^$second; 

if ($xored == 0b00100) # or == 4, or == 0x04 
{ 
    print "Good!"; 
} 

另外,你也應該避免使用$a$b,因爲它們對sort函數有特殊的含義。

3

使用oct

如果EXPR開始與0b,它被解釋爲一個二進制字符串。

#!/usr/bin/env perl 

my ($x, $y) = map oct "0b$_", qw(10001 10101); 
printf "%08b\n", $x^$y; 
4

xor two numbers

my $n1 = 0b10001; 
my $n2 = 0b10101; 
my $n = $n1^$n2; 
say sprintf '%05b', $n; 

進行XOR兩個數(從字符串形式開始):

my $n1 = '10001'; 
my $n2 = '10101'; 
my $len = max map length, $n1, $n2; 
my $n = oct("0b$n1")^oct("0b$n2"); 
say sprintf '%0*b', $len, $n; 

xor two strings:(任意長度,只要它是相同的對於兩個字符串):

my $n1 = '10001'; 
my $n2 = '10101'; 
my $n = ($n1^$n2) | ("\x30" x length($n1)); 
say $n; 

進行XOR兩個字符串:(任意長):

my $n1 = '010001'; 
my $n2 = '10101'; 
my $len = max map length, $n1, $n2; 
$n1 = substr((" " x $len).$n1, -$len); 
$n2 = substr((" " x $len).$n2, -$len); 
my $n = ($n1^$n2) | ("\x30" x $len); 
say $n; 
0

至於$ a和$ b具有固定的長度,比如5:

$a = '00011'; 
$b = '00110'; 
$xor = ($a^$b) | '00000';