2014-09-02 7 views
0

Я пытаюсь реализовать Perl переваривать для CRC, но, к сожалению, я получаю:'Bad Descriptor File' в использовании модуля Perl 'Digest'

Digest Ошибка чтения Ошибка: Bad Descriptor File

Как исправить эту проблему?

Это модуль образец кода 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

Похоже, вы пытаетесь а) переписать '$ binfile' вместо чтения, и б) с помощью' * binfile' как дескриптором вместо '* fhbin'. –

+0

@JimDavis попробовал $ ctx-> addfile (* fhbin); .its бросает ту же ошибку – Asthme

ответ

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'); 
+0

@thank u, но ее значение шестнадцатеричного значения примерно 000007 – Asthme

+0

Что вы ожидали? –

+0

точное значение crc 32 value .... – Asthme