我一直试图弄清楚 Perl 中的unpack函数,但不能完全弄清楚整个事情。
我有:一个字符串和一个 16 位十六进制校验和(例如"this is my string"
,"0671"
)
我需要检查是否"this is my string"
等于校验和'0671'
。
所以我知道unpack("%16W*", $string)
会给我 16 位十进制值,但我需要十六进制表示。我知道这很容易,所以请原谅我的无知。
正如你所说,unpack("%16W*", $string)
给你一个整数。要将整数转换为十六进制,请使用sprintf:
my $string = "this is my string";
my $expected = '0671';
my $checksum = sprintf('%04x', unpack("%16W*", $string));
print "match\n" if $checksum eq $expected;
如果您想要大写十六进制数字,请使用%X
代替%x
(或%04X
在这种情况下)。
或者,您可以换一种方式,使用hex将您的十六进制校验和转换为整数:
my $string = "this is my string";
my $expected = '0671';
my $checksum = unpack("%16W*", $string);
print "match\n" if $checksum == hex $expected; # now using numeric equality
试试unpack("b*',$string)
。
有关语法,请参见pack 手册页。