|  |  | 
 |  |  |     * @param endIndex 截止下标 | 
 |  |  |     * @return CRC | 
 |  |  |     */ | 
 |  |  |    @SuppressWarnings("unused") | 
 |  |  |    public int CRC16_table(byte[] bs, int startIndex, int endIndex) { | 
 |  |  |       int x ; | 
 |  |  |       int crc = 0xffff; | 
 |  |  | 
 |  |  |       } | 
 |  |  |       return crc ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 16位的CRC值 ,查表法 | 
 |  |  |     * 16位的CRC值是无符号两字节整数, | 
 |  |  |     * @param len 数组长度 | 
 |  |  |     * @param bs 字节数组 | 
 |  |  |     * @param crc 原始crc值 | 
 |  |  |     * @return CRC | 
 |  |  |     */ | 
 |  |  |    public short CRC16_table(byte[] bs) { | 
 |  |  |       short x ; | 
 |  |  |       short crc = (short)0xffff; | 
 |  |  |       if(bs != null && bs.length > 0){ | 
 |  |  |          for(byte b : bs){ | 
 |  |  |             x = (short)(crc ^ b) ; | 
 |  |  |             crc = (short)((crc >> 8) ^ crc16_rev_table[x & 0x00FF]) ; | 
 |  |  |    public int CRC16_table(int len, byte[] bs, int crc) { | 
 |  |  |       int x ; | 
 |  |  |       if(bs != null){ | 
 |  |  |          for (int i = 0 ; i < len; i++){ | 
 |  |  |             x =  (crc ^ bs[i]) ; | 
 |  |  |             crc =  ((crc >> 8) ^ crc16_rev_table[x & 0x00FF]) ; | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return crc ; |