13 const uint32_t* GetCRCTable() {
15 static constexpr uint32_t polynomial = 0xEDB88320;
17 static bool is_initialized =
false;
18 static uint32_t crc_table[256];
20 if (!is_initialized) {
21 for (uint32_t i = 0; i < 256; i++) {
23 for (
size_t j = 0; j < 8; j++) {
25 c = polynomial ^ (c >> 1);
33 is_initialized =
true;
41 uint32_t initial_value = 0) {
42 static const uint32_t* crc_table = GetCRCTable();
43 uint32_t c = initial_value ^ 0xFFFFFFFF;
44 const uint8_t* u =
static_cast<const uint8_t*
>(buffer);
45 for (
size_t i = 0; i < length; ++i) {
46 c = crc_table[(c ^ u[i]) & 0xFF] ^ (c >> 8);
48 return c ^ 0xFFFFFFFF;
53 namespace fusion_engine {
58 static constexpr
size_t offset = offsetof(
MessageHeader, protocol_version);