Итак, хотите ли вы ПРОЧНОЕ переваривание или просто быструю проверку ошибок / согласованный поиск?
MD5 / SHA - довольно интенсивные операции - они построены вокруг блочных структур, кратных сотням байтов.
fletcher и CRC32 очень эффективны и делают приличную работу по генерации случайного числа. То, что они не умеют делать, - это наличие случайных битовых позиций. Так, например, вы не захотите использовать fletcher, чем только просмотр только верхний или нижний 8 бит (поскольку будет слишком мало различий) ..
Либо найдите библиотеку с открытым исходным кодом, либо перейдите в Википедию для различных алгоритмов. Я обычно использую что-то вроде:
u32 hash_mystruct(mystruct[] data, u32 count) {
return hash((u8*)data, sizeof(mystruct) * count);
}
u32 hash(u8* data, u32 size) {
u32 hash = 19;
for (u32 i = 0; i < size; i++) {
u8 c = *data++;
if (c != 0) { // usually when doing on strings this wouldn't be needed
hash *= c;
}
hash += 7;
}
}