Difference between revisions of "CRC test data"

From BeebWiki
Jump to: navigation, search
m (1 revision)
 
m (Added category.)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
This test data can be used to verify the working of the [[CRC-16]] and [[CRC-32]] code.
+
[[Category:Programming]]
 +
This test data can be used to verify the working of the [[CRC-16]] and
 +
[[CRC-32]] code.
  
 
==Test Data==
 
==Test Data==
 
 
  String                        CRC-16 (xmodem)    CRC-32 (not XORed)
 
  String                        CRC-16 (xmodem)    CRC-32 (not XORed)
 
  --------------------------------------------------------------------
 
  --------------------------------------------------------------------
Line 9: Line 10:
 
  --------------------------------------------------------------------
 
  --------------------------------------------------------------------
  
To calculate the above and other CRC values the following small Perl script can be used:
+
To calculate the above and other CRC values the following small Perl script
 +
can be used:
  
 
  #!/usr/bin/perl
 
  #!/usr/bin/perl

Latest revision as of 16:55, 12 November 2017

This test data can be used to verify the working of the CRC-16 and CRC-32 code.

Test Data

String                        CRC-16 (xmodem)     CRC-32 (not XORed)
--------------------------------------------------------------------
"An Arbitrary String"         &DDFC               &90415518
"ZYXWVUTSRQPONMLKJIHGFEDBCA"  &B199               &6632024D
--------------------------------------------------------------------

To calculate the above and other CRC values the following small Perl script can be used:

#!/usr/bin/perl
# 2012-07-09 J.E. Klasek, j AT klasek at
# Validate known CRC values with Perl Digest::CRC routines.

use Digest::CRC qw(crc32 crc16 crcccitt crc crc8);

# s ... string for which the CRC is calculated
# crc16 ... hex value of the xmodem CRC
# crc32 ... hex value of the ZIP CRC, not XORed

@s=( { 's'=>"An Arbitrary String", 'crc16'=>"DDFC", 'crc32'=>"90415518" },
     { 's'=>"ZYXWVUTSRQPONMLKJIHGFEDBCA", 'crc16'=>"B199", 'crc32'=>"6632024D (not xored)" },
   );

print <<EOT ;
######################################################
# from Digest::CRC
#-----------------------------------------------------
# name,  [width,init,xorout,refout,poly,refin);
  crc8 => [8,0,0,0,0x07,0],
  crcccitt => [16,0xffff,0,0,0x1021,0],
  crc16 => [16,0,0,1,0x8005,1],
  crc32 => [32,0xffffffff,0xffffffff,1,0x04C11DB7,1],
######################################################
EOT

for my $tv (@s) {
    $s = $tv->{s};

    print  80x"#"."\n";
    print "# Testdata: \"$s\"\n\n";

    # crc($input,$width,$init,$xorout,$refout,$poly,$refin);

    printf "CRC32: %08X\n",crc32($s);
    printf "CRC32 (not xored): %08X (should be %s)\n",crc($s,32,0xffffffff,0x00000000,1,0x04C11DB7,1), $tv->{crc32};
    printf "CRC16: %04X\n",crc16($s);
    printf "CRCCCITT: %04X\n",crcccitt($s);
    printf "CRC16 xmodem: %04X (should be %s)\n",crc($s,16,0,0,0,0x1021,0),$tv->{crc16};
    printf "CRC8: %02X\n",crc8($s);
}