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条)

报告相同问题?

悬赏问题

  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问