我一直在试图找出 unpack Perl 中的函数,但不能完全弄清楚整个事情。
我有什么:
一个字符串和一个 16 位十六进制校验和
(例如“这是我的字符串”
,“0671”
)
我需要检查“这是我的字符串”
是否等于校验和'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
关于perl - 如何从十六进制格式的解包中获取校验和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083561/