チェックサム関数
これらの関数は圧縮とは関係ありませんが、圧縮ライブラリを使うアプリケーションで
役立つ可能性があるため、エクスポートしています。
adler32
ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len);
buf[0..len-1]のバイトで継続中のAdler-32チェックサムを更新し、更新後のチェックサムを
返します。Adler-32値は32ビット符号なし整数の範囲内です。bufがZ_NULLなら、
チェックサムに必要な初期値を返します。
Adler-32チェックサムはCRC-32とほぼ同程度の信頼性があり、はるかに速く計算できます。
使用例:
uLong adler = adler32(0L, Z_NULL, 0);
while (read_buffer(buffer, length) != EOF) {
adler = adler32(adler, buffer, length);
}
if (adler != original_adler) error();
adler32_z
ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf,
z_size_t len);
adler32()と同じですが、長さはsize_tです。Windowsではlongが32ビットであることに
注意してください。
adler32_combine
ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2,
z_off_t len2);
2つのAdler-32チェックサムを1つへ結合します。長さlen1、len2のバイト列seq1、seq2に対し、
それぞれadler1、adler2を計算したとします。adler32_combine()はadler1、adler2、len2だけを
使い、seq1とseq2を連結した列のAdler-32チェックサムを返します。z_off_tはoff_tと同様、
符号付き整数です。len2が負なら、結果には意味も用途もありません。
crc32
ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len);
buf[0..len-1]のバイトで継続中のCRC-32を更新し、更新後のCRC-32を返します。
CRC-32値は32ビット符号なし整数の範囲内です。bufがZ_NULLなら、CRCに必要な初期値を
返します。前処理と後処理(1の補数)は関数内で行うため、アプリケーションでは
行うべきではありません。
使用例:
uLong crc = crc32(0L, Z_NULL, 0);
while (read_buffer(buffer, length) != EOF) {
crc = crc32(crc, buffer, length);
}
if (crc != original_crc) error();
crc32_z
ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf,
z_size_t len);
crc32()と同じですが、長さはsize_tです。Windowsではlongが32ビットであることに
注意してください。
crc32_combine
ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2);
2つのCRC-32チェック値を1つへ結合します。長さlen1、len2のバイト列seq1、seq2に対し、
それぞれcrc1、crc2を計算したとします。crc32_combine()はcrc1、crc2、len2だけを使い、
seq1とseq2を連結した列のCRC-32チェック値を返します。len2は非負でなければならず、
そうでなければ0を返します。
crc32_combine_gen
ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2);
crc32_combine_op()で使う、長さlen2に対応する演算子を返します。
len2は非負でなければならず、そうでなければ0を返します。
crc32_combine_op
ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op);
len2の代わりにopを使って、crc32_combine()と同じ結果を返します。
opはcrc32_combine_gen()がlen2から生成します。生成したopを複数回使う場合には、
crc32_combine()より速くなります。