CRC Class Reference

Static class for computing CRCs. More...

#include <CRC.h>

Classes

struct  Parameters
 CRC parameters. More...
 
struct  Table
 CRC lookup table. More...
 

Static Public Member Functions

template<typename CRCType , crcpp_uint16 CRCWidth>
static CRCType Calculate (const void *data, crcpp_size size, const Parameters< CRCType, CRCWidth > &parameters)
 Computes a CRC. More...
 
template<typename CRCType , crcpp_uint16 CRCWidth>
static CRCType Calculate (const void *data, crcpp_size size, const Parameters< CRCType, CRCWidth > &parameters, CRCType crc)
 Appends additional data to a previous CRC calculation. More...
 
template<typename CRCType , crcpp_uint16 CRCWidth>
static CRCType Calculate (const void *data, crcpp_size size, const Table< CRCType, CRCWidth > &lookupTable)
 Computes a CRC via a lookup table. More...
 
template<typename CRCType , crcpp_uint16 CRCWidth>
static CRCType Calculate (const void *data, crcpp_size size, const Table< CRCType, CRCWidth > &lookupTable, CRCType crc)
 Appends additional data to a previous CRC calculation using a lookup table. More...
 
static const Parameters< crcpp_uint16, 16 > & CRC_16_ARC ()
 Returns a set of parameters for CRC-16 ARC (aka CRC-16 IBM, CRC-16 LHA). More...
 
static const Parameters< crcpp_uint16, 16 > & CRC_16_BUYPASS ()
 Returns a set of parameters for CRC-16 BUYPASS (aka CRC-16 VERIFONE, CRC-16 UMTS). More...
 
static const Parameters< crcpp_uint16, 16 > & CRC_16_CCITTFALSE ()
 Returns a set of parameters for CRC-16 CCITT FALSE. More...
 
static const Parameters< crcpp_uint16, 16 > & CRC_16_GENIBUS ()
 Returns a set of parameters for CRC-16 GENIBUS (aka CRC-16 EPC, CRC-16 I-CODE, CRC-16 DARC). More...
 
static const Parameters< crcpp_uint16, 16 > & CRC_16_KERMIT ()
 Returns a set of parameters for CRC-16 KERMIT (aka CRC-16 CCITT, CRC-16 CCITT-TRUE). More...
 
static const Parameters< crcpp_uint16, 16 > & CRC_16_X25 ()
 Returns a set of parameters for CRC-16 X-25 (aka CRC-16 IBM-SDLC, CRC-16 ISO-HDLC, CRC-16 B). More...
 
static const Parameters< crcpp_uint16, 16 > & CRC_16_XMODEM ()
 Returns a set of parameters for CRC-16 XMODEM (aka CRC-16 ZMODEM, CRC-16 ACORN, CRC-16 LTE). More...
 
static const Parameters< crcpp_uint32, 32 > & CRC_32 ()
 Returns a set of parameters for CRC-32 (aka CRC-32 ADCCP, CRC-32 PKZip). More...
 
static const Parameters< crcpp_uint32, 32 > & CRC_32_BZIP2 ()
 Returns a set of parameters for CRC-32 BZIP2 (aka CRC-32 AAL5, CRC-32 DECT-B, CRC-32 B-CRC). More...
 
static const Parameters< crcpp_uint32, 32 > & CRC_32_MPEG2 ()
 Returns a set of parameters for CRC-32 MPEG-2. More...
 
static const Parameters< crcpp_uint32, 32 > & CRC_32_POSIX ()
 Returns a set of parameters for CRC-32 POSIX. More...
 
static const Parameters< crcpp_uint8, 8 > & CRC_8 ()
 Returns a set of parameters for CRC-8 SMBus. More...
 

Detailed Description

Static class for computing CRCs.

Note
This class supports computation of full and multi-part CRCs, using a bit-by-bit algorithm or a byte-by-byte lookup table. The CRCs are calculated using as many optimizations as is reasonable. If compiling with C++11, the constexpr keyword is used liberally so that many calculations are performed at compile-time instead of at runtime.

Member Function Documentation

◆ Calculate() [1/4]

template<typename CRCType , crcpp_uint16 CRCWidth>
CRCType CRC::Calculate ( const void *  data,
crcpp_size  size,
const Parameters< CRCType, CRCWidth > &  parameters 
)
static

Computes a CRC.

Parameters
[in]dataData over which CRC will be computed
[in]sizeSize of the data
[in]parametersCRC parameters
Template Parameters
CRCTypeInteger type for storing the CRC result
CRCWidthNumber of bits in the CRC
Returns
CRC

References CRC::Parameters< CRCType, CRCWidth >::finalXOR, CRC::Parameters< CRCType, CRCWidth >::initialValue, CRC::Parameters< CRCType, CRCWidth >::reflectInput, and CRC::Parameters< CRCType, CRCWidth >::reflectOutput.

◆ Calculate() [2/4]

template<typename CRCType , crcpp_uint16 CRCWidth>
CRCType CRC::Calculate ( const void *  data,
crcpp_size  size,
const Parameters< CRCType, CRCWidth > &  parameters,
CRCType  crc 
)
static

Appends additional data to a previous CRC calculation.

Note
This function can be used to compute multi-part CRCs.
Parameters
[in]dataData over which CRC will be computed
[in]sizeSize of the data
[in]parametersCRC parameters
[in]crcCRC from a previous calculation
Template Parameters
CRCTypeInteger type for storing the CRC result
CRCWidthNumber of bits in the CRC
Returns
CRC

References CRC::Parameters< CRCType, CRCWidth >::finalXOR, CRC::Parameters< CRCType, CRCWidth >::reflectInput, and CRC::Parameters< CRCType, CRCWidth >::reflectOutput.

◆ Calculate() [3/4]

template<typename CRCType , crcpp_uint16 CRCWidth>
CRCType CRC::Calculate ( const void *  data,
crcpp_size  size,
const Table< CRCType, CRCWidth > &  lookupTable 
)
static

Computes a CRC via a lookup table.

Parameters
[in]dataData over which CRC will be computed
[in]sizeSize of the data
[in]lookupTableCRC lookup table
Template Parameters
CRCTypeInteger type for storing the CRC result
CRCWidthNumber of bits in the CRC
Returns
CRC

References CRC::Parameters< CRCType, CRCWidth >::finalXOR, CRC::Table< CRCType, CRCWidth >::GetParameters(), CRC::Parameters< CRCType, CRCWidth >::initialValue, CRC::Parameters< CRCType, CRCWidth >::reflectInput, and CRC::Parameters< CRCType, CRCWidth >::reflectOutput.

◆ Calculate() [4/4]

template<typename CRCType , crcpp_uint16 CRCWidth>
CRCType CRC::Calculate ( const void *  data,
crcpp_size  size,
const Table< CRCType, CRCWidth > &  lookupTable,
CRCType  crc 
)
static

Appends additional data to a previous CRC calculation using a lookup table.

Note
This function can be used to compute multi-part CRCs.
Parameters
[in]dataData over which CRC will be computed
[in]sizeSize of the data
[in]lookupTableCRC lookup table
[in]crcCRC from a previous calculation
Template Parameters
CRCTypeInteger type for storing the CRC result
CRCWidthNumber of bits in the CRC
Returns
CRC

References CRC::Parameters< CRCType, CRCWidth >::finalXOR, CRC::Table< CRCType, CRCWidth >::GetParameters(), CRC::Parameters< CRCType, CRCWidth >::reflectInput, and CRC::Parameters< CRCType, CRCWidth >::reflectOutput.

◆ CRC_16_ARC()

const CRC::Parameters< crcpp_uint16, 16 > & CRC::CRC_16_ARC ( )
static

Returns a set of parameters for CRC-16 ARC (aka CRC-16 IBM, CRC-16 LHA).

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-16 ARC has the following parameters and check value:
  • polynomial = 0x8005
  • initial value = 0x0000
  • final XOR = 0x0000
  • reflect input = true
  • reflect output = true
  • check value = 0xBB3D
Returns
CRC-16 ARC parameters

◆ CRC_16_BUYPASS()

const CRC::Parameters< crcpp_uint16, 16 > & CRC::CRC_16_BUYPASS ( )
static

Returns a set of parameters for CRC-16 BUYPASS (aka CRC-16 VERIFONE, CRC-16 UMTS).

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-16 BUYPASS has the following parameters and check value:
  • polynomial = 0x8005
  • initial value = 0x0000
  • final XOR = 0x0000
  • reflect input = false
  • reflect output = false
  • check value = 0xFEE8
Returns
CRC-16 BUYPASS parameters

◆ CRC_16_CCITTFALSE()

const CRC::Parameters< crcpp_uint16, 16 > & CRC::CRC_16_CCITTFALSE ( )
static

Returns a set of parameters for CRC-16 CCITT FALSE.

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-16 CCITT FALSE has the following parameters and check value:
  • polynomial = 0x1021
  • initial value = 0xFFFF
  • final XOR = 0x0000
  • reflect input = false
  • reflect output = false
  • check value = 0x29B1
Returns
CRC-16 CCITT FALSE parameters

◆ CRC_16_GENIBUS()

const CRC::Parameters< crcpp_uint16, 16 > & CRC::CRC_16_GENIBUS ( )
static

Returns a set of parameters for CRC-16 GENIBUS (aka CRC-16 EPC, CRC-16 I-CODE, CRC-16 DARC).

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-16 GENIBUS has the following parameters and check value:
  • polynomial = 0x1021
  • initial value = 0xFFFF
  • final XOR = 0xFFFF
  • reflect input = false
  • reflect output = false
  • check value = 0xD64E
Returns
CRC-16 GENIBUS parameters

◆ CRC_16_KERMIT()

const CRC::Parameters< crcpp_uint16, 16 > & CRC::CRC_16_KERMIT ( )
static

Returns a set of parameters for CRC-16 KERMIT (aka CRC-16 CCITT, CRC-16 CCITT-TRUE).

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-16 KERMIT has the following parameters and check value:
  • polynomial = 0x1021
  • initial value = 0x0000
  • final XOR = 0x0000
  • reflect input = true
  • reflect output = true
  • check value = 0x2189
Returns
CRC-16 KERMIT parameters

◆ CRC_16_X25()

const CRC::Parameters< crcpp_uint16, 16 > & CRC::CRC_16_X25 ( )
static

Returns a set of parameters for CRC-16 X-25 (aka CRC-16 IBM-SDLC, CRC-16 ISO-HDLC, CRC-16 B).

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-16 X-25 has the following parameters and check value:
  • polynomial = 0x1021
  • initial value = 0xFFFF
  • final XOR = 0xFFFF
  • reflect input = true
  • reflect output = true
  • check value = 0x906E
Returns
CRC-16 X-25 parameters

◆ CRC_16_XMODEM()

const CRC::Parameters< crcpp_uint16, 16 > & CRC::CRC_16_XMODEM ( )
static

Returns a set of parameters for CRC-16 XMODEM (aka CRC-16 ZMODEM, CRC-16 ACORN, CRC-16 LTE).

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-16 XMODEM has the following parameters and check value:
  • polynomial = 0x1021
  • initial value = 0x0000
  • final XOR = 0x0000
  • reflect input = false
  • reflect output = false
  • check value = 0x31C3
Returns
CRC-16 XMODEM parameters

◆ CRC_32()

const CRC::Parameters< crcpp_uint32, 32 > & CRC::CRC_32 ( )
static

Returns a set of parameters for CRC-32 (aka CRC-32 ADCCP, CRC-32 PKZip).

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-32 has the following parameters and check value:
  • polynomial = 0x04C11DB7
  • initial value = 0xFFFFFFFF
  • final XOR = 0xFFFFFFFF
  • reflect input = true
  • reflect output = true
  • check value = 0xCBF43926
Returns
CRC-32 parameters

◆ CRC_32_BZIP2()

const CRC::Parameters< crcpp_uint32, 32 > & CRC::CRC_32_BZIP2 ( )
static

Returns a set of parameters for CRC-32 BZIP2 (aka CRC-32 AAL5, CRC-32 DECT-B, CRC-32 B-CRC).

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-32 BZIP2 has the following parameters and check value:
  • polynomial = 0x04C11DB7
  • initial value = 0xFFFFFFFF
  • final XOR = 0xFFFFFFFF
  • reflect input = false
  • reflect output = false
  • check value = 0xFC891918
Returns
CRC-32 BZIP2 parameters

◆ CRC_32_MPEG2()

const CRC::Parameters< crcpp_uint32, 32 > & CRC::CRC_32_MPEG2 ( )
static

Returns a set of parameters for CRC-32 MPEG-2.

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-32 MPEG-2 has the following parameters and check value:
  • polynomial = 0x04C11DB7
  • initial value = 0xFFFFFFFF
  • final XOR = 0x00000000
  • reflect input = false
  • reflect output = false
  • check value = 0x0376E6E7
Returns
CRC-32 MPEG-2 parameters

◆ CRC_32_POSIX()

const CRC::Parameters< crcpp_uint32, 32 > & CRC::CRC_32_POSIX ( )
static

Returns a set of parameters for CRC-32 POSIX.

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-32 POSIX has the following parameters and check value:
  • polynomial = 0x04C11DB7
  • initial value = 0x00000000
  • final XOR = 0xFFFFFFFF
  • reflect input = false
  • reflect output = false
  • check value = 0x765E7680
Returns
CRC-32 POSIX parameters

◆ CRC_8()

const CRC::Parameters< crcpp_uint8, 8 > & CRC::CRC_8 ( )
static

Returns a set of parameters for CRC-8 SMBus.

Note
The parameters are static and are delayed-constructed to reduce memory footprint.
CRC-8 SMBus has the following parameters and check value:
  • polynomial = 0x07
  • initial value = 0x00
  • final XOR = 0x00
  • reflect input = false
  • reflect output = false
  • check value = 0xF4
Returns
CRC-8 SMBus parameters

The documentation for this class was generated from the following file: