错误访问 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;
我正在编写一个能够加载二进制 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;