当前位置:编程学习 > JAVA >>

关于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相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,