CRC16校验

C++中的代码如下:传入字节(byte)数组引用和数组长度

unsigned short CTcpClient::Crc16(const char *pBuf, unsigned short nLen)
{
    BYTE i;
    unsigned short crc = 0;

    while (nLen--)
    {
        for (i = 0x80; i != 0; i >>= 1)
        {
            if ((crc&0x8000) != 0)
            {
                crc <<= 1;
                crc ^= 0x1021;
            }
            else
            {
                crc <<= 1;
            }
            if ((*pBuf&i) != 0)
            {
                crc ^= 0x1021;
            }
        }
        pBuf++;
    }

    return crc; 
}

java代码如下,传入byte数组

public static int getCrc16 ( byte[] b )
    {
    	int crc, i;
    	crc = 0;
    	int count = b.length;
    	for(int c =0;c<count;c++)
    	{
    		crc = (int) (crc ^ (int) b[c] << 8);
    		for(i = 0; i < 8; i++)
    		{
    			if ((crc & 0x8000) != 0)
    				crc = (int) (crc << 1 ^ 0x1021);
    			else
    				crc = (int) (crc << 1);
    		}
    	}
    	return (int) (crc & 0xFFFF);
    }

  

原文地址:https://www.cnblogs.com/qlong8807/p/3645135.html