10 const uint32_t* GetCRCTable() {
12 static constexpr uint32_t polynomial = 0xEDB88320;
14 static bool is_initialized =
false;
15 static uint32_t crc_table[256];
17 if (!is_initialized) {
18 for (uint32_t i = 0; i < 256; i++) {
20 for (
size_t j = 0; j < 8; j++) {
22 c = polynomial ^ (c >> 1);
30 is_initialized =
true;
38 uint32_t initial_value = 0) {
39 static const uint32_t* crc_table = GetCRCTable();
40 uint32_t c = initial_value ^ 0xFFFFFFFF;
41 const uint8_t* u =
static_cast<const uint8_t*
>(buffer);
42 for (
size_t i = 0; i < length; ++i) {
43 c = crc_table[(c ^ u[i]) & 0xFF] ^ (c >> 8);
45 return c ^ 0xFFFFFFFF;
50 namespace fusion_engine {
55 static constexpr
size_t offset = offsetof(
MessageHeader, protocol_version);