我有一个结构体里面有2个字节。如何计算校验和(例如MD5哈希)的数组这样的结构?
public struct MyStruct
{
public byte Byte1;
public byte Byte2;
}
public class MyClass
{
public static byte[] ComputeChecksum(MyStruct[] myStructs)
{
// TODO: calculation.
}
}
那么您想要STRONG消化还是只是快速错误检查/一致性查找值?
MD5/SHA是相当密集的操作-它们是围绕数百字节的倍数块结构构建的。
fletcher和CRC32非常有效,并且在产生随机数方面做得很好。他们不擅长的是随机位…所以,例如,你不会想要一个弗莱彻,而不是只看上面或底部的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;
}
}