You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
1.1 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace JT809.Protocol.JT809Extensions
  5. {
  6. public static partial class JT809BinaryExtensions
  7. {
  8. public static Encoding encoding;
  9. private const ushort cnCRC_CCITT = 0x1021; //CRC校验多项式
  10. private static ulong[] CRC = new ulong[256]; //建立CRC16表
  11. static JT809BinaryExtensions()
  12. {
  13. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  14. encoding = Encoding.GetEncoding("GBK");
  15. ushort i, j;
  16. ushort nData;
  17. ushort nAccum;
  18. for (i = 0; i < 256; i++)
  19. {
  20. nData = (ushort)(i << 8);
  21. nAccum = 0;
  22. for (j = 0; j < 8; j++)
  23. {
  24. if (((nData ^ nAccum) & 0x8000) > 0)
  25. nAccum = (ushort)((nAccum << 1) ^ cnCRC_CCITT);
  26. else
  27. nAccum <<= 1;
  28. nData <<= 1;
  29. }
  30. CRC[i] = (ulong)nAccum;
  31. }
  32. }
  33. }
  34. }