关于java版本的CRC16校验
原版需求如下:(1)装入一个16位寄存器,所有数位均为1。
(2)该16位寄存器的高位字节与开始8位字节进行“异或”运算。运算结果放入这个16位寄存器。
(3)把这个16位寄存器向右移1位。
(4a)若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行“异或”运算。
(4b)若向右移出的数位是0,则返回(3)。
(5)重处处(3)和(4),直至移出8位。
(6)另外8位与该16位寄存器进行“异或”运算。
(7)重处处(3)-(6),直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。
(8)这个16位寄存器的内容即2字节CRC错误校验。
现在有C#版本的实现:
public static string CRCcode(string strData)
{
ushort reg = 0xffff;
int len = strData.Length;
int index = 0;
while (index < len)
{
byte num4 = (byte)(reg >> 8);
reg = (ushort)(((short)strData[index]) ^ num4);
index++;
for (int i = 0; i < 8; i++)
{
ushort tmp = (ushort)(reg & 1);
reg = (ushort)(reg >> 1);
if (tmp == 1)
{
reg = (ushort)(reg ^ 0xa001);
}
}
}
return Convert.ToString(reg, 0x10).PadLeft(4, '0').ToUpper();
}
测试字符串:&&test&&,得出CRC校验码:1C80
测试字符串:123456789,得出CRC校验码:2F80
目前网上找到的所有实现均不能达到要求,求高人赐教java实现,本人不胜感激。 --------------------编程问答-------------------- 很少有人用java做CRC校验吗?都没人给个回复,悲剧了
补充:Java , Java相关