努力将CRC-16 0x8408从C转换为Java

时间:2010-08-02 17:35:33

标签: java c

我收到了将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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果不仔细看,您应该知道Java有 TWO 右移运算符:“>>”和“>>>”。它们在如何处理最重要的位方面有所不同,很可能是“>>>”是最适合CRC计算的。