QuasarAppLib
crc32constexper.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2025-2025 QuasarApp.
3 * Distributed under the lgplv3 software license, see the accompanying
4 * Everyone is permitted to copy and distribute verbatim copies
5 * of this license document, but changing it is not allowed.
6*/
7
8#ifndef CRC32CONSTEXPER_H
9#define CRC32CONSTEXPER_H
10
11
12#include <array>
13#include <cstddef>
14#include <cstdint>
15
16namespace QuasarAppUtils {
17
24constexpr std::array<uint32_t, 256> generateCrc32Table(uint32_t polynomial = 0xEDB88320) {
25 std::array<uint32_t, 256> table{};
26 for (uint32_t i = 0; i < 256; ++i) {
27 uint32_t crc = i;
28 for (int j = 0; j < 8; ++j) {
29 crc = (crc >> 1) ^ (-(crc & 1) & polynomial);
30 }
31 table[i] = crc;
32 }
33 return table;
34}
35
40constexpr std::array<uint32_t, 256> crc32Table = generateCrc32Table();
41
50constexpr uint32_t calculateCrc32(const char* data, size_t size, uint32_t initialCrc = 0xFFFFFFFF) {
51 uint32_t crc = initialCrc;
52 for (size_t i = 0; i < size; ++i) {
53 crc = crc32Table[(crc ^ data[i]) & 0xFF] ^ (crc >> 8);
54 }
55 return crc ^ 0xFFFFFFFF;
56}
57
66constexpr uint16_t calculateCrc16(const char* data, size_t size, uint32_t initialCrc = 0xFFFFFFFF) {
67 return calculateCrc32(data, size, initialCrc) % 0xFFFF;
68}
69
78constexpr uint16_t calculateCrc8(const char* data, size_t size, uint32_t initialCrc = 0xFFFFFFFF) {
79 return calculateCrc32(data, size, initialCrc) % 0xFF;
80}
81}
82
83#endif // CRC32CONSTEXPER_H
The QuasaraAppUtils class This lib include base functions for the all applications of QuasarApp group...
constexpr std::array< uint32_t, 256 > generateCrc32Table(uint32_t polynomial=0xEDB88320)
generateCrc32Table This method generate crc32 table for fast calculate crc32 hash.
constexpr uint32_t calculateCrc32(const char *data, size_t size, uint32_t initialCrc=0xFFFFFFFF)
calculateCrc32 This method calculate crc32 hash for data.
constexpr uint16_t calculateCrc8(const char *data, size_t size, uint32_t initialCrc=0xFFFFFFFF)
calculateCrc8 This method calculate crc8 hash for data.
constexpr uint16_t calculateCrc16(const char *data, size_t size, uint32_t initialCrc=0xFFFFFFFF)
calculateCrc16 This method calculate crc16 hash for data.
constexpr std::array< uint32_t, 256 > crc32Table
crc32Table This is crc32 table for fast calculate crc32 hash.