Как вычислить CRC (контрольную сумму) для массива структуры? - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть структура с 2 байтами внутри.Как вычислить контрольную сумму (например, хэш MD5) для массива таких структур?

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

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

1 Ответ

1 голос
/ 17 ноября 2011

Итак, хотите ли вы ПРОЧНОЕ переваривание или просто быструю проверку ошибок / согласованный поиск?

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;
    }
  }
...