CppSerdes  1.0
A serialization/deserialization library designed with embedded systems in mind
cppcrc.h File Reference

A very small, fast, header-only, C++ library for generating CRCs. More...

#include <stddef.h>
#include <stdint.h>
#include <utility>

Go to the source code of this file.

Classes

struct  crc_utils::crc_lookup_table< out_t, poly, refl_in, refl_out, size, typename >
 
struct  crc_utils::crc< out_t, poly_arg, init_arg, refl_in_arg, refl_out_arg, x_or_out_arg >
 

Typedefs

using CRC8::CRC8 = crc_utils::crc< uint8_t, 0x07, 0x00, false, false, 0x00 >
 
using CRC8::CDMA2000 = crc_utils::crc< uint8_t, 0x9B, 0xFF, false, false, 0x00 >
 
using CRC8::DARC = crc_utils::crc< uint8_t, 0x39, 0x00, true, true, 0x00 >
 
using CRC8::DVB_S2 = crc_utils::crc< uint8_t, 0xD5, 0x00, false, false, 0x00 >
 
using CRC8::EBU = crc_utils::crc< uint8_t, 0x1D, 0xFF, true, true, 0x00 >
 
using CRC8::I_CODE = crc_utils::crc< uint8_t, 0x1D, 0xFD, false, false, 0x00 >
 
using CRC8::ITU = crc_utils::crc< uint8_t, 0x07, 0x00, false, false, 0x55 >
 
using CRC8::MAXIM = crc_utils::crc< uint8_t, 0x31, 0x00, true, true, 0x00 >
 
using CRC8::ROHC = crc_utils::crc< uint8_t, 0x07, 0xFF, true, true, 0x00 >
 
using CRC8::WCDMA = crc_utils::crc< uint8_t, 0x9B, 0x00, true, true, 0x00 >
 
using CRC16::ARC = crc_utils::crc< uint16_t, 0x8005, 0x0000, true, true, 0x0000 >
 
using CRC16::AUG_CCITT = crc_utils::crc< uint16_t, 0x1021, 0x1D0F, false, false, 0x0000 >
 
using CRC16::BUYPASS = crc_utils::crc< uint16_t, 0x8005, 0x0000, false, false, 0x0000 >
 
using CRC16::CCITT_FALSE = crc_utils::crc< uint16_t, 0x1021, 0xFFFF, false, false, 0x0000 >
 
using CRC16::CDMA2000 = crc_utils::crc< uint16_t, 0xC867, 0xFFFF, false, false, 0x0000 >
 
using CRC16::DDS_110 = crc_utils::crc< uint16_t, 0x8005, 0x800D, false, false, 0x0000 >
 
using CRC16::DECT_R = crc_utils::crc< uint16_t, 0x0589, 0x0000, false, false, 0x0001 >
 
using CRC16::DECT_X = crc_utils::crc< uint16_t, 0x0589, 0x0000, false, false, 0x0000 >
 
using CRC16::DNP = crc_utils::crc< uint16_t, 0x3D65, 0x0000, true, true, 0xFFFF >
 
using CRC16::EN_13757 = crc_utils::crc< uint16_t, 0x3D65, 0x0000, false, false, 0xFFFF >
 
using CRC16::GENIBUS = crc_utils::crc< uint16_t, 0x1021, 0xFFFF, false, false, 0xFFFF >
 
using CRC16::KERMIT = crc_utils::crc< uint16_t, 0x1021, 0x0000, true, true, 0x0000 >
 
using CRC16::MAXIM = crc_utils::crc< uint16_t, 0x8005, 0x0000, true, true, 0xFFFF >
 
using CRC16::MCRF4XX = crc_utils::crc< uint16_t, 0x1021, 0xFFFF, true, true, 0x0000 >
 
using CRC16::MODBUS = crc_utils::crc< uint16_t, 0x8005, 0xFFFF, true, true, 0x0000 >
 
using CRC16::RIELLO = crc_utils::crc< uint16_t, 0x1021, 0xB2AA, true, true, 0x0000 >
 
using CRC16::T10_DIF = crc_utils::crc< uint16_t, 0x8BB7, 0x0000, false, false, 0x0000 >
 
using CRC16::TELEDISK = crc_utils::crc< uint16_t, 0xA097, 0x0000, false, false, 0x0000 >
 
using CRC16::TMS37157 = crc_utils::crc< uint16_t, 0x1021, 0x89EC, true, true, 0x0000 >
 
using CRC16::USB = crc_utils::crc< uint16_t, 0x8005, 0xFFFF, true, true, 0xFFFF >
 
using CRC16::X_25 = crc_utils::crc< uint16_t, 0x1021, 0xFFFF, true, true, 0xFFFF >
 
using CRC16::XMODEM = crc_utils::crc< uint16_t, 0x1021, 0x0000, false, false, 0x0000 >
 
using CRC16::A = crc_utils::crc< uint16_t, 0x1021, 0xC6C6, true, true, 0x0000 >
 
using CRC32::CRC32 = crc_utils::crc< uint32_t, 0x04C11DB7, 0xFFFFFFFF, true, true, 0xFFFFFFFF >
 
using CRC32::BZIP2 = crc_utils::crc< uint32_t, 0x04C11DB7, 0xFFFFFFFF, false, false, 0xFFFFFFFF >
 
using CRC32::JAMCRC = crc_utils::crc< uint32_t, 0x04C11DB7, 0xFFFFFFFF, true, true, 0x00000000 >
 
using CRC32::MPEG_2 = crc_utils::crc< uint32_t, 0x04C11DB7, 0xFFFFFFFF, false, false, 0x00000000 >
 
using CRC32::POSIX = crc_utils::crc< uint32_t, 0x04C11DB7, 0x00000000, false, false, 0xFFFFFFFF >
 
using CRC32::SATA = crc_utils::crc< uint32_t, 0x04C11DB7, 0x52325032, false, false, 0x00000000 >
 
using CRC32::XFER = crc_utils::crc< uint32_t, 0x000000AF, 0x00000000, false, false, 0x00000000 >
 
using CRC32::C = crc_utils::crc< uint32_t, 0x1EDC6F41, 0xFFFFFFFF, true, true, 0xFFFFFFFF >
 
using CRC32::D = crc_utils::crc< uint32_t, 0xA833982B, 0xFFFFFFFF, true, true, 0xFFFFFFFF >
 
using CRC32::Q = crc_utils::crc< uint32_t, 0x814141AB, 0x00000000, false, false, 0x00000000 >
 
using CRC64::ECMA = crc_utils::crc< uint64_t, 0x42F0E1EBA9EA3693, 0x0000000000000000, false, false, 0x0000000000000000 >
 
using CRC64::GO_ISO = crc_utils::crc< uint64_t, 0x000000000000001B, 0xFFFFFFFFFFFFFFFF, true, true, 0xFFFFFFFFFFFFFFFF >
 
using CRC64::WE = crc_utils::crc< uint64_t, 0x42F0E1EBA9EA3693, 0xFFFFFFFFFFFFFFFF, false, false, 0xFFFFFFFFFFFFFFFF >
 
using CRC64::XY = crc_utils::crc< uint64_t, 0x42F0E1EBA9EA3693, 0xFFFFFFFFFFFFFFFF, true, true, 0xFFFFFFFFFFFFFFFF >
 

Functions

constexpr uint8_t crc_utils::reverse_bits (uint8_t x)
 
constexpr uint16_t crc_utils::reverse_bits (uint16_t x)
 
constexpr uint32_t crc_utils::reverse_bits (uint32_t x)
 
constexpr uint64_t crc_utils::reverse_bits (uint64_t x)
 
template<typename out_t , out_t poly, bool refl_in, bool refl_out, size_t index>
constexpr out_t crc_utils::get_crc_table_value_at_index ()
 
template<typename out_t , out_t poly, bool refl_in, bool refl_out, out_t x_or_out, typename std::enable_if< refl_in, int * >::type = nullptr>
constexpr out_t crc_utils::calculate_crc (const uint8_t *bytes, size_t n, out_t crc)
 

Detailed Description

A very small, fast, header-only, C++ library for generating CRCs.

Author
Darren V Levine (Darre.nosp@m.nVLe.nosp@m.vine@.nosp@m.gmai.nosp@m.l.com)
Version
1.3
Date
2022-11-17