Class CRC

Nested Relationships

Nested Types

Class Documentation

class CRC

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.

Public Static Functions

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

Computes a CRC.

Parameters:
  • data[in] Data over which CRC will be computed

  • size[in] Size of the data

  • parameters[in] CRC parameters

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

Returns:

CRC

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

Appends additional data to a previous CRC calculation.

Note

This function can be used to compute multi-part CRCs.

Parameters:
  • data[in] Data over which CRC will be computed

  • size[in] Size of the data

  • parameters[in] CRC parameters

  • crc[in] CRC from a previous calculation

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

Returns:

CRC

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

Computes a CRC via a lookup table.

Parameters:
  • data[in] Data over which CRC will be computed

  • size[in] Size of the data

  • lookupTable[in] CRC lookup table

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

Returns:

CRC

template<typename CRCType, crcpp_uint16 CRCWidth>
static inline 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.

Note

This function can be used to compute multi-part CRCs.

Parameters:
  • data[in] Data over which CRC will be computed

  • size[in] Size of the data

  • lookupTable[in] CRC lookup table

  • crc[in] CRC from a previous calculation

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

Returns:

CRC

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

Returns a set of parameters for CRC-8 SMBus.

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

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

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.

Note

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

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

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.

Note

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

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

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

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

static inline 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).

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

static inline 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).

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

static inline 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).

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

static inline 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).

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

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

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.

Note

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

static inline 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).

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

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

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

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

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

Returns a set of parameters for CRC-32 POSIX.

Note

The parameters are static and are delayed-constructed to reduce memory footprint.

Note

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

template<typename CRCType, crcpp_uint16 CRCWidth>
struct Parameters

CRC parameters.

Public Functions

inline Table<CRCType, CRCWidth> MakeTable() const

Returns a CRC lookup table construct using these CRC parameters.

Note

This function primarily exists to allow use of the auto keyword instead of instantiating a table directly, since template parameters are not inferred in constructors.

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

Returns:

CRC lookup table

Public Members

CRCType polynomial

CRC polynomial.

CRCType initialValue

Initial CRC value.

CRCType finalXOR

Value to XOR with the final CRC.

bool reflectInput

true to reflect all input bytes

bool reflectOutput

true to reflect the output CRC (reflection occurs before the final XOR) // NOLINT

template<typename CRCType, crcpp_uint16 CRCWidth>
struct Table

CRC lookup table. After construction, the CRC parameters are fixed.

Note

A CRC table can be used for multiple CRC calculations.

Public Functions

inline explicit Table(const Parameters<CRCType, CRCWidth> &parameters)

Constructs a CRC table from a set of CRC parameters.

Parameters:

params[in] CRC parameters

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

inline const Parameters<CRCType, CRCWidth> &GetParameters() const

Gets the CRC parameters used to construct the CRC table.

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

Returns:

CRC parameters

inline const CRCType *GetTable() const

Gets the CRC table.

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

Returns:

CRC table

inline CRCType operator[](unsigned char index) const

Gets an entry in the CRC table.

Parameters:

index[in] Index into the CRC table

Template Parameters:
  • CRCType – Integer type for storing the CRC result

  • CRCWidth – Number of bits in the CRC

Returns:

CRC table entry