我有一串ASCII字符。我使用解壓函數將其轉換爲十六進制字符串。Perl中的十六進制計算
#! /usr/bin/perl
use strict;
use warnings;
my $str="hello";
my $value=unpack("H*",$str);
print $value,"\n";
**output:** 68656c6c6f
現在,讓我們說,我想用這個輸出的十六進制字節的字符串,每次讀一個字節,並在其上進行一些計算和存儲在另一個變量輸出。
例如,
#! /usr/bin/perl
use strict;
use warnings;
my $str="hello";
my $value=unpack("H*",$str);
my $num=0x12;
my $i=0;
while($i<length($value))
{
my $result.=(substr($value,$i,2)^$num);
$i+=2;
}
print $result,"\n";
**output:**
Argument "6c" isn't numeric in bitwise xor (^) at test.pl line 13.
Argument "6c" isn't numeric in bitwise xor (^) at test.pl line 13.
Argument "6f" isn't numeric in bitwise xor (^) at test.pl line 13.
8683202020
輸出不正確,也有幾個警告。
如果我們把字符串的第一個十六進制字節,「你好」作爲一個例子:
68 xor 12 = 7A
但是,輸出其顯示爲86.輸出是不正確的,也是我不知道如何 它得到了86的輸出。
什麼是正確的做法呢?
您使用的警告,但您試圖訪問其範圍以外$結果? – ugexe