|  |  | 
 |  |  | package com.dy.common.util; | 
 |  |  |  | 
 |  |  |  | 
 |  |  | import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1; | 
 |  |  |  | 
 |  |  | @SuppressWarnings("unused") | 
 |  |  | public final class CRC16 { | 
 |  |  |     | 
 |  |  | 
 |  |  |     * @return CRC | 
 |  |  |     */ | 
 |  |  |    @SuppressWarnings("unused") | 
 |  |  |    public short CRC16_table(byte[] bs, int startIndex, int endIndex) { | 
 |  |  |       short x ; | 
 |  |  |       short crc = (short)0xffff; | 
 |  |  |    public int CRC16_table(byte[] bs, int startIndex, int endIndex) { | 
 |  |  |       int x ; | 
 |  |  |       int crc = 0xffff; | 
 |  |  |       if(bs != null && bs.length >= endIndex + 1){ | 
 |  |  |          for (int i = startIndex ; i <= endIndex; i++){ | 
 |  |  |             x = (short)(crc ^ bs[i]) ; | 
 |  |  |             crc = (short)((crc >> 8) ^ crc16_rev_table[x & 0x00FF]) ; | 
 |  |  |             x =  (crc ^ bs[i]) ; | 
 |  |  |             crc =  ((crc >> 8) ^ crc16_rev_table[x & 0x00FF]) ; | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return crc ; | 
 |  |  | 
 |  |  |       System.arraycopy(new byte[] {(byte)(c - ((c / 256) * 256)) }, 0, crc, 1, 1); | 
 |  |  |       return crc; | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |  | 
 |  |  |    public static void main(String[] args) throws Exception { | 
 |  |  |       int s = 62430 ; | 
 |  |  |       //String hex = "AA0018AA16015301150599800001100000014A005D4D5D4D00004000AA7E16" ; | 
 |  |  |       String hex = "AA0018AA16015301150599800001100000014A005D4D5D4D00004000" ; | 
 |  |  |       byte[] bs = ByteUtil.hex2Bytes(hex) ; | 
 |  |  |       int crc = new CRC16().CRC16_table(bs, 0 , bs.length - 1) ; | 
 |  |  |       byte[] crcBs = new byte[4] ; | 
 |  |  |       ByteUtil.int2Bytes_BE(crcBs, crc, 0); | 
 |  |  |       System.out.println(ByteUtil.bytes2Hex(crcBs, true)) ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  | } |