把下面这段c语言的crc校验 转换成java的,麻烦了, 我是实在不会

//crc 之前数据,数据长度
unsigned short CRC16(unsigned char const *buf, unsigned int len)
{
unsigned short Crc=0xffff;
int i;
for(i=0; i {
Crc = ((Crc >> 8) & 0xFF) ^ CRC16Table [(Crc^ *buf++) & 0xFF];
}

return Crc;

}

http://blog.sina.com.cn/s/blog_3e28c8a50102vcp4.html

自已把0x0000改成0xffff就行了

https://www.jianshu.com/p/3c1398d086a7
里面有crc算法的各种语言实现

int CRC16(byte[] buf)
{
int Crc=0xffff;
int i;
for(i=0; i < buf.length; i++){
Crc = ((Crc >> 8) & 0xFF) ^ CRC16Table [(Crc^ buf[i]) & 0xFF];
}
return Crc&0xFFFF;

}

问题解决了, 解决方案如下。

/**
 * 计算CRC16校验码
 *
 * @param bytes 字节数组
 * @return {@link String} 校验码
 * @since 1.0
 */
public static String getCRC(byte[] bytes) {
    int CRC = 0x0000ffff;
    int POLYNOMIAL = 0x0000a001;
    int i, 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;
            }
        }
    }
    return Integer.toHexString(CRC);
}

/**
 * 将16进制单精度浮点型转换为10进制浮点型
 *
 * @return float
 * @since 1.0
 */
private float parseHex2Float(String hexStr) {
    BigInteger bigInteger = new BigInteger(hexStr, 16);
    return Float.intBitsToFloat(bigInteger.intValue());
}

/**
 * 将十进制浮点型转换为十六进制浮点型
 *
 * @return String
 * @since 1.0
 */
private String parseFloat2Hex(float data) {
    return Integer.toHexString(Float.floatToIntBits(data));
}