CRC-32 не требует дополнения ввода. Например, crc32("abc")
и crc32("abc\0")
будут иметь разные выходы.
Должна быть вторая функция или параметр, который по умолчанию равен 0 для начального значения хэша. Это используется для расширения хеша. crc32("cd", crc32("ab")) == crc32("abcd")
. Так что просто добавьте последние несколько байтов.
В итоге вы получите что-то вроде этого:
std::uint32_t padded_crc32(const char* data, std::size_t size, std::uint32_t initial_value = 0) {
const char padding[3] = {0, 0, 0};
std::uint32_t unpadded_crc32 = crc32(data, size, initial_value); // Or however you call it
int padding_size = (4 - (size % 4)) % 4;
return crc32(padding, padding_size, unpadded_crc32);
}