crc32_hash(3f) - [M_hashkeys] CRC (Cyclic Redundancy Check) (LICENSE:PD)
Synopsis
Description
Options
Returns
References
Author
Example
function crc32_hash(a,continue) result (crc)
class(*),intent(in) :: anything(:) logical,intent(in),optional :: continue integer(int64) :: crc_out
This ia 32-bit version of the Cyclic Redundancy Check(CRC). This variant of CRC-32 uses LSB-first order, sets the initial CRC to FFFFFFFF_int32, and complements the final CRC.The result should be in accordance with ISO 3309, ITU-T V.42, Gzip and PNG.
anything input value to generate a CRC check for. May be a array or scalar of numeric or string values of type CHARACTER, int8, int16, int32, int64, real32, real64, real128 continue optional parameter. If not present or .F. starts new CRC sum. If .T. continues a CRC starting with last CRC calculated.
crc The calculated CRC sum. It is calculated as a 32-bit value but returned as a 64-bit value, as Fortran does not currently support unsigned integers.
Algorithms are described in "Computation of CRC" in Wikipedia. Also see
https://en.wikipedia.org/wiki/Cyclic_redundancy_check
This was derived from an unattributed example on http://rosettacode.org, but has been modified.
Sample program:
program demo_crc32_hash use,intrinsic :: ISO_FORTRAN_ENV, only : int64 use M_hashkeys, only : crc32_hash implicit none integer :: i integer(int64) :: crc character(*), parameter :: s = "The quick brown fox jumps over the lazy dog" ! string crc=crc32_hash(s) print "(Z8)", crc print "(i0)", crc ! character array print "(i0)", crc32_hash([ & & ’T’,’h’,’e’,’ ’,& & ’q’,’u’,’i’,’c’,’k’,’ ’,& & ’b’,’r’,’o’,’w’,’n’,’ ’,& & ’f’,’o’,’x’,’ ’]) print "(i0)", crc32_hash([ & & ’j’,’u’,’m’,’p’,’s’,’ ’,& & ’o’,’v’,’e’,’r’,’ ’,& & ’t’,’h’,’e’,’ ’,& & ’l’,’a’,’z’,’y’,’ ’,& & ’d’,’o’,’g’],continue=.true.) ! numeric array print "(i0)", crc32_hash([(i,i=1,100)]) end program demo_crc32_hashExpected output:
414FA339 1095738169 2293265890 1095738169 1783575711
Nemo Release 3.1 | crc32_hash (3) | February 23, 2025 |