weixin_38946372 2019-09-24 10:56 采纳率: 100%
浏览 327
已采纳

C语言的CRC16方法转成java方法

unsigned int usart_get_crc16(unsigned char* pData, unsigned int usLen)
{
    unsigned char i;
    unsigned int crc=0x0ffff;

    while (usLen-- != 0) {
        for (i = 0x80; i != 0; i /= 2) {
            if ((crc & 0x8000) != 0) {
                crc *= 2;
                crc ^= 0x8005;
            } else
                crc *= 2;
            if ((*pData & i) != 0)
                crc ^= 0x8005;
        }
        pData++;
    }

    return crc & 0x0ffff;
}
  • 写回答

2条回答 默认 最新

  • dabocaiqq 2019-09-24 12:01
    关注

    首先,你的c语言版本的结果是

    #include <stdio.h>
    
    unsigned int usart_get_crc16(unsigned char* pData, unsigned int usLen)
    {
        unsigned char i;
        unsigned int crc=0x0ffff;
    
        while (usLen-- != 0) {
            for (i = 0x80; i != 0; i /= 2) {
                if ((crc & 0x8000) != 0) {
                    crc *= 2;
                    crc ^= 0x8005;
                } else
                    crc *= 2;
                if ((*pData & i) != 0)
                    crc ^= 0x8005;
            }
            pData++;
        }
    
        return crc & 0x0ffff;
    }
    
    int main()
    {
        unsigned char arr[] = {0x55, 0x01, 0x08, 0x90, 0x06, 0x00 };
        int n = usart_get_crc16(arr, 6);
        printf("%08X", n);
        return 0;
    }
    

    0000A7B0

    你说这个和你的不同,说明你给的输入数据不对。你得重新提供。

    改写的程序如下

    int usart_get_crc16(char[] pData, int usLen)
    {
        char i;
        int crc=0x0ffff;
        int ipData = 0;
        while (usLen-- != 0) {
            for (i = 0x80; i != 0; i /= 2) {
                if ((crc & 0x8000) != 0) {
                    crc *= 2;
                    crc ^= 0x8005;
                } else
                    crc *= 2;
                if ((pData[ipData] & i) != 0)
                    crc ^= 0x8005;
            }
            ipData++;
        }
    
        return crc & 0x0ffff;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料