我正在尝试为CRC实现Perl摘要,但不幸的是我得到了:
摘要读取失败:错误的文件描述符
如何解决此问题?
这是模块示例代码here:
sub crc3439() {
$ctx = Digest::CRC->new(type=>"crc16");
$ctx = Digest::CRC->new(width=>16, init=>0x2345, xorout=>0x0000,
refout=>1, poly=>0x8005, refin=>1, cont=>1);
my $binfile = 'envbin.bin';
open(fhbin, '>', $binfile) or die "Could not open bin file '$binfile' $!";
binmode(fhbin);
$ctx->add($binfile);
$ctx->addfile(*binfile);
$digest = $ctx->hexdigest;
return $digest;
}
答案 0 :(得分:1)
首先,您要覆盖$binfile
而不是阅读它。将开放模式更改为'<'
应该可以解决这个问题。
您的->addfile
正在添加一个不存在的文件句柄;你可能想要*fhbin
,或者想要一个词法(my $fhbin
)文件句柄。
此外,您使用额外的$ctx
电话覆盖->new
。
sub crc3439 {
my $binfile = shift;
my $ctx = Digest::CRC->new(
type => "crc16",
width => 16,
init => 0x2345,
xorout => 0x0000,
refout => 1,
poly => 0x8005,
refin => 1,
cont => 1,
);
open(my $fhbin, '<', $binfile) or die "Could not open bin file '$binfile' $!";
binmode($fhbin);
$ctx->add($binfile);
$ctx->addfile($fhbin);
return $ctx->hexdigest;
}
print crc3439('foo.bin');