perl - 如何从十六进制格式的解包中获取校验和?

标签 perl syntax unpack

我一直在试图找出 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/

相关文章:

bash - 选择两列值一致的行

perl - 在 Perl 中,如何检查数组元素之间的步长?

Javascript 条件语句导致其他函数停止工作

c++ - C++ 语法错误,编译器不会警告或错误 int v = func(&v);

Python:如何将剩余的列表元素添加到列表中,类似于解压?

linux - 删除部分绝对路径字符串

perl - 等待子进程在 perl 的系统命令中完成

c - 在 AVR 中使用 eeprom 函数的 C 语法错误

c++ - 将可变类型列表解压到变量

assembly - 查找打包文件OEP的方法