2

我一直试图弄清楚 Perl 中的unpack函数,但不能完全弄清楚整个事情。

我有:一个字符串和一个 16 位十六进制校验和(例如"this is my string""0671"

我需要检查是否"this is my string"等于校验和'0671'

所以我知道unpack("%16W*", $string)会给我 16 位十进制值,但我需要十六进制表示。我知道这很容易,所以请原谅我的无知。

4

2 回答 2

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
于 2011-02-22T21:34:20.060 回答
-1

试试unpack("b*',$string)

有关语法,请参见pack 手册页

于 2011-02-22T20:34:46.117 回答