我一直在试图弄清楚Perl中的unpack函数,并且无法弄清楚整个事情。
我拥有的:
一个字符串和一个16位十六进制校验和
(例如"this is my string"
,"0671"
)
我需要检查"this is my string"
是否等于校验和'0671'
。
所以我知道unpack("%16W*", $string)
会给我16位十进制值,但我需要十六进制表示。我知道这很容易,请原谅我的无知。
答案 0 :(得分:4)
如你所说,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
答案 1 :(得分:-1)
尝试unpack("b*',$string)
。
请参阅pack man page了解语法。