String::CRC crc function returns incorrect result, why?

Discussion in 'Perl' started by `Zidane Tribal, Jul 26, 2007.

  1. it would appear that using the command 'crc("data")' from the String::CRC
    returns incorrect results (although, they are at least consistently

    for example, this script.....

    #!/usr/bin/perl -w
    use strict;
    use String::CRC;
    print "crc: " . crc($ARGV[0]) . " " . length($ARGV[0]) . "\n";

    produces this output:

    [email protected]:~/ps2/dev/crccheck$ ./ 12345
    crc: 3817467633 5
    [email protected]:~/ps2/dev/crccheck$

    whereas this command:

    [email protected]:~/ps2/dev/crccheck$ echo -n "12345" | cksum
    3288622155 5
    [email protected]:~/ps2/dev/crccheck$

    produces a different crc value.

    this is also true using String::CRC32, DIGEST::CRC and DIGEST::CRC32 (using
    the command line commands cksum and crc32 to create respective crc and
    crc32 values to test against)

    my query is simple.... why is this? although the values are different,
    they are consistently different (i.e. the same result returned with each
    call given the same data). can anyone explain what i am doing wrong?

    `Zidane Tribal, Jul 26, 2007
    1. Advertisements

  2. `Zidane Tribal

    Joe Smith Guest

    No, it's not. crc != cksum; there are many different CRC algorithms.
    The String::CRC::Cksum module calculates a 32 bit CRC, generating
    the same CRC value as the POSIX cksum program.

    linux% cat
    #!/usr/bin/perl -w
    use strict;
    use String::CRC::Cksum qw(cksum);
    print "cksum: " . cksum($ARGV[0]) . " " . length($ARGV[0]) . "\n";
    linux% perl 12345
    cksum: 3288622155 5


    P.S. The newsgroup comp.lang.perl is defunct; use comp.lang.perl.misc instead.
    Joe Smith, Jul 28, 2007
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.