首页 新闻 赞助 找找看

C# CRC32 校验位

0
悬赏园豆:5 [已关闭问题] 关闭于 2017-07-05 17:32

C# 中string字符串怎么获得CRC32 校验位数据????

居~的主页 居~ | 初学一级 | 园豆:28
提问于:2017-06-17 16:13
< >
分享
所有回答(1)
1

CRC32 是字节数组的.没有string的crc这种说法.你得先转字节数组.再生成crc

吴瑞祥 | 园豆:29449 (高人七级) | 2017-06-17 16:38

我现在转成byte字节数组了,但是我使用代码转出来的CRC校验位跟Java那边的不一致,现在不知道是哪里出了问题。:

代码如下:

  static public void GetCRC32Table()
        {
            ulong Crc;
            Crc32Table = new ulong[256];
            int i, j;
            for (i = 0; i < 256; i++)
            {
                Crc = (ulong)i;
                for (j = 8; j > 0; j--)
                {
                    if ((Crc & 1) == 1)
                        Crc = (Crc >> 1) ^ 0xEDB88320;
                    else
                        Crc >>= 1;
                }
                Crc32Table[i] = Crc;
            }
        }


 public static string GetCRC32(string input)
        {
            GetCRC32Table();
            System.Text.ASCIIEncoding cvt = new System.Text.ASCIIEncoding();
            byte[] bytes = cvt.GetBytes(input);
            int iCount = bytes.Length;
            //  1 0 1 0  0 1 1 1  0 0 0 1  1 0 1 0  0 1 0 0  0 0 1 0  0 0 1 1  0 1 0 1
            //  a  7  1  a  4  2  3  
            ulong crc = 0xa71a423;
            string crc2 = "";
            crc = crc ^ 0xffffffff;
            for (int i = 0; i < iCount; i++)
            {
                crc = Crc32Table[((int)crc ^ bytes[i]) & 0xFF] ^ (crc >> 8);
                ulong temp = crc ^ 0xffffffffL;
                crc2 = String.Format("{0:X00000000}", temp);
            }
            return crc2;
        }

 

原始数据是:020700000CD76DF8E7AEFCD76DF8E7AEFC

我这边的结果是:E1AE8B84

Java那边转换的是: 8D48EAA2

两边不一致,所以出错,

支持(0) 反对(0) 居~ | 园豆:28 (初学一级) | 2017-06-17 16:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册