/**
* 计算CRC16校验码
*
* @param bytes 需要计算的字节数组
*/publicstaticStringgetCRC(byte[]bytes){
intCRC=0x0000ffff;intPOLYNOMIAL=0x0000a001;inti,j;for(i=0;i<bytes.length;i++){CRC^=((int)bytes[i]&0x000000ff);for(j=0;j<8;j++){if((CRC&0x00000001)!=0){CRC>>=1;CRC^=POLYNOMIAL;}else{CRC>>=1;}}}returnInteger.toHexString(CRC);
}
注意: 直接以字符串输入'010600010100', 得到数值为'A118',发现并不是我想要的值。发现是ASCII校验结果,而我想要的是十六进制校验结果。所以需要转换,通过
byte[]bytes=newBigInteger("010600010100",16).toByteArray();
方法进行转换,然后进行CRC计算,即得到结果'D9 9A'。
网友评论