我有一串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