qq_36394003
changjiu999
2018-03-16 02:45
采纳率: 100%
浏览 1.0k
已采纳

把下面这段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;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • qq_29494043
    CheapTrick 2018-03-16 05:11
    已采纳

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

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

    点赞 评论
  • qq_28492325
    qq_28492325 2018-03-16 05:36

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

    点赞 评论
  • baidu_30233079
    baidu_30233079 2018-03-16 06:26

    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;

    }

    点赞 评论
  • qq_36394003
    changjiu999 2018-03-16 07:48

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

    /**
     * 计算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));
    }
    
    点赞 评论

相关推荐