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

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • `Zidane Tribal

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

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

    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:

    zidane@bluemist :~/ps2/dev/crccheck$ ./crctest.pl 12345
    crc: 3817467633 5
    zidane@bluemist :~/ps2/dev/crccheck$

    whereas this command:

    zidane@bluemist :~/ps2/dev/crccheck$ echo -n "12345" | cksum
    3288622155 5
    zidane@bluemist :~/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.
    --
    You dont need a reason to help people. `Zidane Tribal.
  • Joe Smith

    #2
    Re: String::CRC crc function returns incorrect result, why?

    `Zidane Tribal wrote:
    it would appear that using the command 'crc("data")' from the String::CRC
    returns incorrect results
    No, it's not. crc != cksum; there are many different CRC algorithms.
    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:
    >
    zidane@bluemist :~/ps2/dev/crccheck$ ./crctest.pl 12345
    crc: 3817467633 5
    zidane@bluemist :~/ps2/dev/crccheck$
    >
    whereas this command:
    >
    zidane@bluemist :~/ps2/dev/crccheck$ echo -n "12345" | cksum
    3288622155 5
    zidane@bluemist :~/ps2/dev/crccheck$
    >
    produces a different crc value.
    The String::CRC::Ck sum module calculates a 32 bit CRC, generating
    the same CRC value as the POSIX cksum program.

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


    -Joe

    P.S. The newsgroup comp.lang.perl is defunct; use comp.lang.perl. misc instead.

    Comment

    Working...