modbus.go 354 B

1234567891011121314151617181920212223
  1. package crc
  2. func ModbusCrc16(data []byte, len int) uint16 {
  3. var crc uint16 = 0xFFFF
  4. var polynomial uint16 = 0xA001
  5. if len == 0 {
  6. return 0
  7. }
  8. for i := 0; i < len; i++ {
  9. crc ^= uint16(data[i]) & 0x00FF
  10. for j := 0; j < 8; j++ {
  11. if (crc & 0x0001) != 0 {
  12. crc >>= 1
  13. crc ^= polynomial
  14. } else {
  15. crc >>= 1
  16. }
  17. }
  18. }
  19. return crc
  20. }