# MATH_CRC*Update

## 構文

      #include <nitro/math/crc.h>

      void MATH_CRC8Update( const MATHCRC8Table *table, MATHCRC8Context *context, const void* input, u32 length );
      void MATH_CRC16Update( const MATHCRC16Table *table, MATHCRC16Context *context, const void* input, u32 length );
      void MATH_CRC16CCITTUpdate( const MATHCRC16Table *table, MATHCRC16Context *context, const void* input, u32 length );
      void MATH_CRC32Update( const MATHCRC32Table *table, MATHCRC32Context *context, const void* input, u32 length );
      void MATH_CRC32POSIXUpdate( const MATHCRC32Table *table, MATHCRC32Context *context, const void* input, u32 length );

## 引数

table | 各種 CRC 計算用のテーブルへのポインタ。
context | 各種 CRC 計算用のコンテキスト構造体へのポインタ。
input | 入力データへのポインタ。
length | 入力データのサイズ。

## 返り値

なし。

## 説明

この関数は、各種 CRC によるハッシュ値を入力データによって更新します。あらかじめ、table 引数を `MATH_CRC*InitTable()`で、context 引数を `MATH_CRC*Init()`で初期化してある必要があります。
この関数を任意の回数呼び出した後に、`MATH_CRC*GetHash()`を使用してハッシュ値を得ます。
入力データには任意のサイズ・任意のアラインメント位置のものが使用できます。
CRC-8 は 8bit のハッシュ値を求めるためのアルゴリズムです。
CRC-16, CRC-16/CCITT は 16bit のハッシュ値を求めるためのアルゴリズムです。
CRC-32, CRC-32/POSIX は 32bit のハッシュ値を求めるためのアルゴリズムです。
CRC-16 は圧縮プログラムの ARC, LHA などで使用されているアルゴリズムです。先頭に 0 のバイトを追加してもハッシュ値が変わらないという制限があります。
CRC-16/CCITT は様々なデータリンク層の規格で FCS (Frame Check Sequence) として使用されているアルゴリズムです。CCITT (Comite Consultatif International Telegraphique et Telephonique) の X.25 などで規定されています。
CRC-32 は圧縮プログラムの PKZIP や画像フォーマットの PNG などで使用されているアルゴリズムです。詳細は ISO 3309, RFC 2083 などを参照してください。
CRC-32/POSIX は POSIX 準拠の Unix に標準で入っている cksum コマンドで使用されているアルゴリズムです。POSIX 1003.2 で規定されています。なお、cksum コマンドでは、入力ファイルの最後にファイル長を加えてから CRC をとります。

## 参照

`MATH_CRC*InitTable, MATH_CRC*Init, MATH_CRC*GetHash`

## 履歴

2005/04/12 初版