11 constexpr uint32_t POLYNOMIAL = 0xEDB88320;
13 std::array<uint32_t, 0x100> table{};
15 for (uint32_t i = 0; i < 0x100; ++i)
18 for (uint32_t bit = 0; bit < 8; ++bit)
19 item = ((item & 1) != 0) ? (POLYNOMIAL ^ (item >> 1)) : (item >> 1);
28 uint32_t result = 0xFFFFFFFF;
30 uint8_t checksum_table[4]{};
31 std::memcpy(&checksum_table, &
checksum,
sizeof(uint32_t));
33 for (uint32_t i = 0; i < 4; i++)
34 result =
CHECKSUM_TABLE[(result & 0xFF) ^ *(checksum_table + i)] ^ (result >> 8);
36 for (uint32_t i = 0; i < size; i++)
37 result =
CHECKSUM_TABLE[(result & 0xFF) ^ *(bytes + i)] ^ (result >> 8);