📄 checksum.cpp
字号:
//---------------------------------------------------------------------------
//
// Checksum.cpp: Checksum Routines Implementation
//
//---------------------------------------------------------------------------
#include "StdAfx.h"
#include "Checksum.h"
DWORD __cdecl adler32(DWORD adler, BYTE* buf, int len)
{
// @WARNING: assume the buffer is always non-NULL
// if (! buf) return 1;
DWORD s1 = adler & 0xffff;
DWORD s2 = (adler >> 16) & 0xffff;
while (len > 0)
{
int k = len < NMAX ? len : NMAX;
len -= k;
while (k >= 16)
{
s1 += buf[0]; s2 += s1;
s1 += buf[1]; s2 += s1;
s1 += buf[2]; s2 += s1;
s1 += buf[3]; s2 += s1;
s1 += buf[4]; s2 += s1;
s1 += buf[5]; s2 += s1;
s1 += buf[6]; s2 += s1;
s1 += buf[7]; s2 += s1;
s1 += buf[8]; s2 += s1;
s1 += buf[9]; s2 += s1;
s1 += buf[10]; s2 += s1;
s1 += buf[11]; s2 += s1;
s1 += buf[12]; s2 += s1;
s1 += buf[13]; s2 += s1;
s1 += buf[14]; s2 += s1;
s1 += buf[15]; s2 += s1;
buf += 16;
k -= 16;
}
while (k--)
{
s1 += *buf++;
s2 += s1;
}
s1 %= BASE;
s2 %= BASE;
}
return (s2 << 16) | s1;
}
DWORD crc32(DWORD crc, BYTE* buf, int len)
{
// @WARNING: assume the buffer is always non-NULL
// if (! buf) return 0;
crc ^= 0xffffffffL;
while (len >= 8)
{
crc = crc_table[(int(crc) ^ (*buf++)) & 0xff] ^ (crc >> 8);
crc = crc_table[(int(crc) ^ (*buf++)) & 0xff] ^ (crc >> 8);
crc = crc_table[(int(crc) ^ (*buf++)) & 0xff] ^ (crc >> 8);
crc = crc_table[(int(crc) ^ (*buf++)) & 0xff] ^ (crc >> 8);
crc = crc_table[(int(crc) ^ (*buf++)) & 0xff] ^ (crc >> 8);
crc = crc_table[(int(crc) ^ (*buf++)) & 0xff] ^ (crc >> 8);
crc = crc_table[(int(crc) ^ (*buf++)) & 0xff] ^ (crc >> 8);
crc = crc_table[(int(crc) ^ (*buf++)) & 0xff] ^ (crc >> 8);
len -= 8;
}
if (len) do
{
crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
} while (--len);
return crc ^ 0xffffffffL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -