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

C# 如何计算结构数组的CRC(校验和)?,c#,arrays,struct,md5,checksum,C#,Arrays,Struct,Md5,Checksum,我有一个里面有2个字节的结构。如何为这样的结构数组计算校验和(例如MD5哈希) public struct MyStruct { public byte Byte1; public byte Byte2; } public class MyClass { public static byte[] ComputeChecksum(MyStruct[] myStructs) { // TODO: calculation. } } 那么,您想

我有一个里面有2个字节的结构。如何为这样的结构数组计算校验和(例如MD5哈希)

public struct MyStruct
{
    public byte Byte1;
    public byte Byte2;
}

public class MyClass
{
    public static byte[] ComputeChecksum(MyStruct[] myStructs)
    {
        // TODO: calculation.
    }
}

那么,您想要的是强烈的消化,还是只是快速的错误检查/一致的查找值

MD5/SHA是非常密集的操作——它们是围绕数百字节倍数的块结构构建的

fletcher和CRC32非常高效,在生成随机数方面做得很好。。他们不擅长的是有随机的位位置。。因此,例如,您不希望fletcher只查看上8位或下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;
    }
  }
u32散列\u mystruct(mystruct[]数据,u32计数){
返回散列((u8*)数据,sizeof(mystruct)*计数;
}
u32散列(u8*数据,u32大小){
u32散列=19;
对于(u32 i=0;i
您尝试过什么?看起来您应该能够简单地在数组上循环,对这两个字段应用任何选择的哈希算法。旁白:公开公共字段通常是不好的,而在结构上具有可变(可变)字段通常是不好的……旁白:,和不是一回事。我只是想将我的结构数组作为字节数组放入MD5计算方法,该方法只接受byte[]和MemoryStream。好吧,忘记CRC和MD5。如何将结构的数组视为原始字节数组?