如何从十六进制格式的unpack中获取校验和?

时间:2011-02-22 20:27:58

标签: perl syntax unpack

我一直在试图弄清楚Perl中的unpack函数,并且无法弄清楚整个事情。

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

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

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

2 个答案:

答案 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了解语法。