CRC32 是字节数组的.没有string的crc这种说法.你得先转字节数组.再生成crc
我现在转成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
两边不一致,所以出错,