CRC.cpp 654 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "stdafx.h"
  2. #include "CRC.h"
  3. #define POLY64REV 0x95AC9329AC4BC9B5ULL
  4. #define INITIALCRC 0xFFFFFFFFFFFFFFFFULL
  5. unsigned long long CRC64::CRCTable[256] = { 0 };
  6. CRC64::CRC64()
  7. {
  8. int i, j;
  9. unsigned long long part;
  10. for (i = 0; i < 256; i++)
  11. {
  12. part = i;
  13. for (j = 0; j < 8; j++)
  14. {
  15. if (part & 1)
  16. part = (part >> 1) ^ POLY64REV;
  17. else
  18. part >>= 1;
  19. }
  20. CRCTable[i] = part;
  21. }
  22. }
  23. UINT64 CRC64::GetCrc64(const char* pSrc, DWORD size)
  24. {
  25. unsigned long long crc = INITIALCRC;
  26. for (DWORD i = 0; i < size; i++)
  27. {
  28. crc = CRCTable[(crc ^ pSrc[i]) & 0xff] ^ (crc >> 8);
  29. }
  30. return crc;
  31. }