C#CRC32校验之CRC-32MPEG-2算法先引⽤⼏条链接:
4.C# CRC32校验 之 CRC-32/MPEG-2算法的实现:
铜瓦//1EA90DFF
南瓜的力量string s = "E4BFA10813100000"; /// <summary>
/// 进⾏CRC32验证
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string CRC32_MPEG_2_Str(string str)
{
uint[] CRC32_Data;
CRC32_Data = strToToHexByte(str);
UInt32 CRC32_Result = 0;
CRC32_Result = CRC32_MPEG_2(CRC32_Data, CRC32_Data.Length);
string temp=(CRC32_Result.ToString("X4"));
temp = temp.Length == 8 ? temp : "0" + temp;
return temp;
}
private static uint[] strToToHexByte(string hexString)
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0)
hexString += " ";
uint[] returnBytes = new uint[hexString.Length / 2];兰州交通大学
学报 海南第二中学
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}
/// <summary>
/// </summary>
/
// <param name="filePath"></param>
/// <returns></returns>
private static UInt32 CRC32_MPEG_2(uint[] data, int length)
{
uint i;
UInt32 crc = 0xffffffff, j = 0;
顽皮豆豆while ((length--) != 0)
{
crc ^= (UInt32)data[j] << 24;
j++;
for (i = 0; i < 8; ++i)
{
if ((crc & 0x80000000) != 0)
crc = (crc << 1) ^ 0x04C11DB7;
else
crc <<= 1;
}
}
return crc;
}