[C#] CRC校验 →→→→→进入此内容的聊天室

来自 , 2020-04-29, 写在 C#, 查看 192 次.
URL http://www.code666.cn/view/f60ce002
  1. public class CRC
  2. {
  3.  
  4. /// <summary>
  5. /// CRC码计算,返回数组中,0为低位,1为高位
  6. /// </summary>
  7. /// <param name="data"> </param>
  8. /// <returns> </returns>
  9. public static byte[] CRC16(byte[] data)
  10. {
  11. byte CRC16Lo = 0;
  12. byte CRC16Hi = 0;
  13. byte CL = 0;
  14. byte CH = 0;
  15. byte SaveHi = 0;
  16. byte SaveLo = 0;
  17. // short i = 0;
  18. short Flag = 0;
  19. byte[] ReturnData = new byte[1 + 1];
  20. // CRC寄存器
  21. // 多项式码&HA001
  22. CRC16Lo = (byte)0xFF;
  23. CRC16Hi = (byte)0xFF;
  24. CL = (byte)0x1;
  25. CH = (byte)0xA0;
  26. for (int i = 0; i <= data.Length - 3; i++)
  27. {
  28. CRC16Lo = Convert.ToByte(CRC16Lo ^ data[i]);
  29. // 每一个数据与CRC寄存器进行异或
  30. for (Flag = (short)0;
  31. Flag <= 7.0;
  32. Flag = Convert.ToInt16(Flag + 1))
  33. {
  34. SaveHi = CRC16Hi;
  35. SaveLo = CRC16Lo;
  36. CRC16Hi = Convert.ToByte(CRC16Hi / 2);
  37. // 高位右移一位
  38. CRC16Lo = Convert.ToByte(CRC16Lo / 2);
  39. // 低位右移一位
  40. if ((SaveHi & 0x1) == 0x1)
  41. {
  42. // 如果高位字节最后一位为1
  43. CRC16Lo = Convert.ToByte(CRC16Lo | 0x80);
  44. // 则低位字节右移后前面补1
  45. }
  46. // 否则自动补0
  47. if ((SaveLo & 0x1) == 0x1)
  48. {
  49. // 如果LSB为1,则与多项式码进行异或
  50. CRC16Hi = Convert.ToByte(CRC16Hi ^ CH);
  51. CRC16Lo = Convert.ToByte(CRC16Lo ^ CL);
  52. }
  53. // Debug.Print Str(i) & ":", CRC16Lo, CRC16Hi
  54. }
  55. // Debug.Print CRC16Lo, CRC16Hi
  56. }
  57. ReturnData[0] = CRC16Lo;
  58. // CRC低位
  59. ReturnData[1] = CRC16Hi;
  60. // CRC高位
  61. return ReturnData;
  62. }
  63. }
  64.  
  65. //csharp/1102

回复 "CRC校验"

这儿你可以回复上面这条便签

captcha