zoukankan      html  css  js  c++  java
  • CRC16算法之三:CRC16-CCITT-MODBUS算法的java实现

    CRC16算法系列文章

    CRC16算法之一:CRC16-CCITT-FALSE算法的java实现

    CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现

    CRC16算法之三:CRC16-CCITT-MODBUS算法的java实现

     

    功能

    实现CRC16-CCITT-MODBUS算法

    支持int、short类型

    支持选择数组区域计算

    实现

    1. /**
    2. * crc16_ccitt_modbus算法(四字节)友情提示:做好自己!--eguid博客地址:http://blog.csdn.net/eguid_1
    3. * @param buf
    4. * @param offset
    5. * @param length
    6. * @return
    7. */
    8. public static int crc16_ccitt_modbus(byte[] buf,int offset, int length) {
    9. int i, j;
    10. int c, crc = 0xFFFF;
    11. for (i = offset; i < length; i++) {
    12. c = buf[i] & 0x00FF;
    13. crc ^= c;
    14. for (j = 0; j < 8; j++) {
    15. if ((crc & 0x0001) != 0) {
    16. crc >>= 1;
    17. crc ^= 0xA001;
    18. } else
    19. crc >>= 1;
    20. }
    21. }
    22. return crc;
    23. }
    24.  
    25. /**
    26. * crc16_ccitt_modbus算法(四字节)
    27. * @param buf
    28. * @return
    29. */
    30. public static int crc16_ccitt_modbus(byte[] buf) {
    31. return crc16_ccitt_modbus(buf,0,buf.length);
    32. }
    33.  
    34.  
    35. /**
    36. * crc16_ccitt_modbus算法(两字节)
    37. * @param buf
    38. * @param offset
    39. * @param length
    40. * @return
    41. */
    42. public static int crc16_ccitt_modbus_short(byte[] buf,int offset, int length) {
    43. return (short)crc16_ccitt_modbus(buf,offset,length);
    44. }
    45.  
    46. /**
    47. * crc16_ccitt_modbus算法(两字节)
    48. * @param buf
    49. * @return
    50. */
    51. public static int crc16_ccitt_modbus_short(byte[] buf) {
    52. return (short)crc16_ccitt_modbus(buf,0,buf.length);
    53. }
  • 相关阅读:
    java 28
    java 28
    java 27
    java 27
    java 27
    java 27
    java 27
    java 27
    java 27
    java 27
  • 原文地址:https://www.cnblogs.com/eguid/p/9667144.html
Copyright © 2011-2022 走看看