错误访问 Perl 中的结构元素

Wrong access to struct elements in Perl

我正在编写一个能够加载二进制 RAW 文件(.bin 文件扩展名)的 Perl 脚本,计算 CRC-16(无符号短整型,16 位 ~ 2 字节),并将此 CRC 存储在文件尾部,使用以下命令:

my $ctx = Digest::CRC->new( type => 'crc16' );  #OK :)
open my $FH, '<:raw', $inFile or die $!;        #OK :)
$ctx->addfile(*$FH);                            #OK :)
print ("$inFile CRC16 value = 0x");             #OK :)
my $digest = $ctx->hexdigest;                   #OK :)
print $digest, "\n";                            #OK :)
print WRITEHANDLE pack("n*", $digest);          #NOT OK :(

最后一条命令发出警告,而且 CRC 未以正确方式存储

并且在二进制输出中最后 2 个字节不是一次 calculated/expected

很明显我没有正确使用 pack 方法来存储值,而是来自 pack() MAN

在这种情况下,pack() 的正确模板是什么?

根据警告,您有字符串 6c5b,但 pack 'n' 需要一个数字。 $ctx->digest 产生那个数字。

print WRITEHANDLE pack 'n', $ctx->digest;

也就是说,使用摘要的十六进制表示,您可以使用 pack 'H*'(只要用零填充)。

print WRITEHANDLE pack 'H*', $ctx->hexdigest;