crc16.go 753 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // hello
  2. package datastruct
  3. //HJ212 计算crc
  4. func CalCRC16HJ212(data []byte) uint16 {
  5. var (
  6. crc uint16 = 0xFFFF
  7. inum uint16 = 0
  8. )
  9. length := len(data)
  10. for i := 0; i < length; i++ {
  11. inum = uint16(data[i])
  12. crc = (crc >> 8) & 0x00FF
  13. crc = crc ^ inum
  14. for j := 0; j < 8; j++ {
  15. flag := crc % 2
  16. crc = crc >> 1
  17. if flag == 1 {
  18. crc = crc ^ 0xA001
  19. }
  20. }
  21. }
  22. return crc
  23. }
  24. func CalCRC16ModbusRTU(data []byte) uint16 {
  25. var (
  26. crc uint16 = 0xFFFF
  27. inum uint16 = 0
  28. )
  29. length := len(data)
  30. for i := 0; i < length; i++ {
  31. inum = uint16(data[i])
  32. //crc = (crc >> 8) & 0x00FF
  33. crc ^= inum & 0x00FF
  34. for j := 0; j < 8; j++ {
  35. flag := crc % 2
  36. crc = crc >> 1
  37. if flag == 1 {
  38. crc = crc ^ 0xA001
  39. }
  40. }
  41. }
  42. return crc
  43. }