using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Checksums;
namespace Common
{
/// <summary>
/// CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,
/// 其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,
/// 对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
/// </summary>
class Crc32Helper
{
/// <summary>
/// 计算文件CRC32值,返回16进制
/// </summary>
/// <param name="file_"></param>
/// <returns></returns>
public static string Crc32Value(string file_)
{
using (FileStream fs = File.OpenRead(file_))
{
int bytesRead;
byte[] buffer = new byte[4096];
var currentCrc = new Crc32();
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
currentCrc.Update(buffer, 0, bytesRead);
}
return currentCrc.Value.ToString("x8");
}
}
/// <summary>
/// 计算byte[]的CRC32值
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
public static string Crc32Value(byte[] buffer)
{
var currentCrc = new Crc32();
currentCrc.Update(buffer, 0, buffer.Length);
return currentCrc.Value.ToString("x8");
}
public static string Adler32Value(string file_)
{
using (FileStream fs = File.OpenRead(file_))
{
int bytesRead;
byte[] buffer = new byte[4096];
var currentAdler = new Adler32();
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
currentAdler.Update(buffer, 0, bytesRead);
}
return currentAdler.Value.ToString("x8");
}
}
}
}