求实现CRC16 算法Java版

1.下面是C++的代码

uint16_t UpdateCRC16(uint16_t crcIn, uint8_t byte)
{

uint32_t crc = crcIn;
uint32_t in = byte|0x100;
do
{
    crc <<= 1;
    in <<= 1;
    if (in&0x100)
        ++crc;
    if (crc&0x10000)
        crc ^= 0x1021;
}
while (!(in&0x10000));
return crc&0xffffu;

}

uint16_t Cal_CRC16(const uint8_t* data, uint32_t size)
{

uint32_t crc = 0;
const uint8_t* dataEnd = data+size;
while (data<dataEnd)
    crc = UpdateCRC16(crc,*data++);

crc = UpdateCRC16(crc,0);
crc = UpdateCRC16(crc,0);
return crc&0xffffu;

}

2.下面是我自己实现的Java版本,有些问题,跪求上面CRC16的Java版本
public int UpdateCRC16(int crcIn, byte data)

{
    int crc = crcIn;
    int in = data|0x100;
 
    do
    {
        crc <<= 1;
        in <<= 1;
        if ( (in&0x100) == 0x100)
            ++crc;
        if ( (crc&0x10000) == 0x10000)
            crc ^= 0x1021;
    }
    while ((in&0x10000) != 0x10000);
    return crc&0xffff;
}

public int Cal_CRC16(byte[] data, int size)
{
    int crc = 0;
    int i;

    for( i = 0; i<size;i++)
    {
        crc = UpdateCRC16(crc, data[i]);
    }

    crc = UpdateCRC16(crc,(byte)0);
    crc = UpdateCRC16(crc,(byte)0);
    return crc&0xffff;
}





阅读 2.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题