如何计算结构数组的CRC(校验和)



我有一个结构体里面有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;
    }
  }

最新更新