

Task

Demonstrate a method of deriving the Cyclic Redundancy Check from within the language.



The result should be in accordance with ISO 3309, ITU-T V.42, Gzip and PNG.

Algorithms are described on Computation of CRC in Wikipedia.
This variant of CRC-32 uses LSB-first order, sets the initial CRC to FFFFFFFF16, and complements the final CRC.

For the purpose of this task, generate a CRC-32 checksum for the ASCII encoded string:

 The quick brown fox jumps over the lazy dog


  [ table ]                      is crctable ( n --> n )
 
  256 times
    [ i^ 8 times
      [ dup 1 >> 
        swap 1 & if
          [ hex EDB88320 ^ ] ]
     ' crctable put ]
 
  [ hex FFFFFFFF swap
    witheach 
      [ over ^ hex FF & 
        crctable
        swap 8 >> ^ ] 
     hex FFFFFFFF ^ ]            is crc-32   ( [ --> n )
 
  $ "The quick brown fox jumps over the lazy dog" crc-32
  16 base put 
  echo 
  base release