Java 根据CCITT多项式(x^16+;x^12+;x^5+;1)计算CRC
我有一个校验和方法,可以计算用C#编写的CRC到CCIT多项式。现在我必须用java编写相同的方法,但我不知道如何用java编写该方法Java 根据CCITT多项式(x^16+;x^12+;x^5+;1)计算CRC,java,c#,checksum,crc,Java,C#,Checksum,Crc,我有一个校验和方法,可以计算用C#编写的CRC到CCIT多项式。现在我必须用java编写相同的方法,但我不知道如何用java编写该方法 private int ComputeChecksum(byte[] buf, int StartIdx, int EndIdx) { int CRC = 0xFFFF; for (int i = StartIdx; i < EndIdx; i++) { int ch = b
private int ComputeChecksum(byte[] buf, int StartIdx, int EndIdx)
{
int CRC = 0xFFFF;
for (int i = StartIdx; i < EndIdx; i++)
{
int ch = buf[i]; /* Process one byte */
for (int j = 0; j < 8; j++)
{
int xo = (CRC ^ ch) & 0x0001;
CRC >>= 1;
ch >>= 1;
if (xo == 1)
CRC ^= 0x8408; /* Toggle bits / set incoming bit */
}
}
return CRC ^ 0xFFFF; // 1's complement
}
private int-ComputeChecksum(字节[]buf,int-StartIdx,int-EndIdx)
{
int CRC=0xFFFF;
对于(int i=StartIdx;i>=1;
ch>>=1;
如果(xo==1)
CRC^=0x8408;/*切换位/设置输入位*/
}
}
返回CRC^0xFFFF;//1的补码
}
您可以将所有注释更改为“/”,然后从现有的c代码开始,根据需要进行更改。是的,我在Java中尝试了这段代码,但它给出了一个完全错误的校验和。你能帮我弄清楚怎么做吗?试着用char[]buf
而不是byte[]buf
。我应该如何用java编写代码,计算校验和?除了将byte改为char,它可能会按原样工作。你可以将所有注释改为“/”,然后从现有的c代码开始,是的,我在Java中尝试了这段代码,但它给出了一个完全错误的校验和。你能帮我弄清楚怎么做吗?试着用char[]buf
代替byte[]buf
。我应该如何用java编写代码,计算校验和?除了将字节改为char,它可能会按原样工作。