在編程方面,從來都是實踐出真知,書讀百遍其義自見,所以實戰是最好的提升自己編程能力的方式。 前一段時間,寫了一些實戰系列文章,如: ASP.NET MVC開發學生信息管理系統 Vue+Antdv+Asp.net WebApi開發學生信息管理系統 WPF+Prism+MAH+Asp.net Web A ...
一、C# 進行 CRC32
public class CRC32
{
private static readonly uint[] _crc32Table;
static CRC32()
{
uint crc;
_crc32Table = new uint[256];
int i, j;
for (i = 0; i < 256; i++)
{
crc = (uint)i;
for (j = 8; j > 0; j--)
{
if ((crc & 1) == 1)
crc = (crc >> 1) ^ 0xEDB88320;
else
crc >>= 1;
}
_crc32Table[i] = crc;
}
}
/// <summary>
/// 獲取CRC32校驗值
/// </summary>
public static uint GetCRC32(byte[] bytes)
{
uint value = 0xffffffff;
int len = bytes.Length;
for (int i = 0; i < len; i++)
{
value = (value >> 8) ^ _crc32Table[(value & 0xFF) ^ bytes[i]];
}
return value ^ 0xffffffff;
}
/// <summary>
/// 獲取CRC32校驗值
/// </summary>
public static uint GetCRC32(string str)
{
byte[] bytes = Encoding.UTF8.GetBytes(str);
return GetCRC32(bytes);
}
}
使用方法
string dataStr = "1234567890";
var crcUint = CRC32.GetCRC32(dataStr);
var crcHex = string.Format("{0:X8}", crcUint);
Console.WriteLine($"{dataStr} => CRC32 Uint: {crcUint}, Hex: {crcHex}");
結果:1234567890 => CRC32 Uint: 639479525, Hex: 261DAEE5
二、OpenResty 中進行 CRC32
location /lua_crc {
content_by_lua_block
{
local str = "1234567890"
local crc32_long = ngx.crc32_long(str)
ngx.say(str .. " => CRC32 long: " .. crc32_long, "</br>")
}
}
結果:1234567890 => CRC32 long: 639479525
C# 和 OpenResty 中進行 CRC32 的結果是一致的。