Re: Adler-32
- From
- Alex Naumoff ()
- To
- All
- Date
- 2002-12-09T19:50:56Z
- Area
- RU.ALGORITHMS
Dmitriy Shestakov wrote:
> From: "Dmitriy Shestakov" <dmitriy@aamsystems.ru>
>=20
> Hi!
>=20
> =E1 =CB=D4=CF =DA=CE=C1=C5=D4, =D7 =DE=C5=CD =D3=D5=D4=D8 =C1=CC=C7=CF=D2=
=C9=D4=CD=C1 =D0=CF=C4=D3=DE=C5=D4=C1 =CB=CF=CE=D4=D2=CF=CC=D8=CE=CF=CA =D3=
=D5=CD=CD=D9 Adler-32 ? =E9 =D7
> =DE=C5=CD =CF=D4=CC=C9=DE=C9=C5 =CF=D4 CRC32?
>=20
>=20
>=20
=E4=C5=CE=D8 =C4=CF=C2=D2=D9=CA.
RFC =CE=C5 =D0=CF=CD=CE=C0.
CRC - =DC=D4=CF =D0=CF=CC=C9=CE=CF=CD=C9=C1=CC=D8=CE=D9=CA =C1=CC=C7=CF=D2=
=C9=D4=CD. =FE=D4=CF =D3=CC=C5=C4=D5=C5=D4 =C9=DA =D0=C5=D2=C5=D7=CF=C4=C1=
=D2=C1=D3=DB=C9=C6=D2=CF=D7=CB=C9 =C1=CE=C7=CC=C9=CA=D3=CB=CF=C7=CF =C1=CB=
=D2=CF=CE=C9=CD=C1.
Adler-32 =D1=D7=CC=D1=C5=D4=D3=D1 =C1=D2=C9=C6=CD=C5=D4=C9=DE=C5=D3=CB=C9=
=CD.
=E5=D3=CC=C9 =CE=C5 =CF=DB=C9=C2=C1=C0=D3=D8, =DC=D4=CF =CD=CF=C4=C9=C6=C9=
=C3=C9=D2=CF=D7=C1=CE=CE=D9=CA =C1=CC=C7=CF=D2=C9=D4=CD =E6=CC=C5=D4=DE=C5=
=D2=C1 - =D5=D7=C5=CC=C9=DE=C5=CE=C1=20
=D2=C1=DA=D2=D1=C4=CE=CF=D3=D4=D8.
=EB=CF=C4 =CD=CF=D6=CE=CF =D0=CF=D3=CD=CF=D4=D2=C5=D4=D8 =D7 zlib, =C6=C1=
=CA=CC adler32.c:
/* adler32.c -- compute the Adler-32 checksum of a data stream
* Copyright (C) 1995-1998 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.=
h
*/
/* @(#) $FreeBSD: src/lib/libz/adler32.c,v 1.5 1999/08/28 00:06:00 peter =
Exp $ */
#include "zlib.h"
#define BASE 65521L /* largest prime smaller than 65536 */
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <=3D 2^32-=
1 */
#define DO1(buf,i) {s1 +=3D buf[i]; s2 +=3D s1;}
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
#define DO16(buf) DO8(buf,0); DO8(buf,8);
/*=20
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D */
uLong ZEXPORT adler32(adler, buf, len)
uLong adler;
const Bytef *buf;
uInt len;
{
unsigned long s1 =3D adler & 0xffff;
unsigned long s2 =3D (adler >> 16) & 0xffff;
int k;
if (buf =3D=3D Z_NULL) return 1L;
while (len > 0) {
k =3D len < NMAX ? len : NMAX;
len -=3D k;
while (k >=3D 16) {
DO16(buf);
buf +=3D 16;
k -=3D 16;
}
if (k !=3D 0) do {
s1 +=3D *buf++;
s2 +=3D s1;
} while (--k);
s1 %=3D BASE;
s2 %=3D BASE;
}
return (s2 << 16) | s1;
}
=E1=CC=C5=CB=D3=C1=CE=C4=D2 =EE=C1=D5=CD=CF=D7,
alx@relex.ru
--- Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2) Gecko/20021126
* Origin: Relex, Inc. (2:5025/17@fidonet)