我收到了将CRC例程从C转换为java的任务,但我真的很难让CRC与记录的示例相匹配。这是我的文档:
使用的算法是CCITT-16(0x1021或 0x8408反转)。剩下的是 初始化为全1(0xFFFF)
WORD crc16_lsb(BYTE *pData, WORD length)
{
BYTE i;
WORD data, crc;
crc = 0xFFFF;
if (length == 0)
return 0;
do
{
data = (WORD)0x00FF & *pData++;
crc = crc ^ data;
for (i = 8; i > 0; i--)
{
if (crc & 0x0001)
crc = (crc >> 1) ^ 0x8408;
else
crc >>= 1;
}
}
while (--length);
crc = ~crc;
return (crc);
}
例如,对于由以下字节组成的接收器状态请求消息: 1B FF 41 00
将计算以下2字节CRC: 27 66
我从这里开始使用以下javacode http://www.cs.princeton.edu/introcs/51data/CRC16CCITT.java.html
非常感谢任何帮助。
答案 0 :(得分:1)
如果不仔细看,您应该知道Java有 TWO 右移运算符:“>>”和“>>>”。它们在如何处理最重要的位方面有所不同,很可能是“>>>”是最适合CRC计算的。