Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

$ZCRC (ObjectScript)

チェックサム関数

Synopsis

$ZCRC(string,mode,expression)

引数

引数 説明
string チェックサム演算が実行される文字列。
mode 使用するチェックサム・モードを指定する整数コード。
expression オプション — "seed" の初期値。整数として指定します。省略した場合、既定はゼロ (0) です。

概要

$ZCRCstring に対して冗長巡回検査を実行し、整数のチェックサム値を返します。$ZCRC によって返される値は、使用する引数により異なります。

  • $ZCRC(string,mode) は、文字列のチェックサムを計算して返します。mode の値により、$ZCRC が計算するチェックサムのタイプが決まります。

  • $ZCRC(string,mode,expression) は、mode により指定されたモードを使用して、string のチェックサムを計算して返します。expression は、複数の文字列をチェックする際 "seed" の初期値を提供します。これにより、複数の文字列で連続的に $ZCRC 計算を実行し、それらの文字列を連結して $ZCRC を実行したかのように、同じチェックサム値を得ることができます。

引数

string

バイト文字列。値、変数、式として指定できます。バイトの文字列のみを使用し、それ以外を使用した場合は、<FUNCTION> エラーが発生します。

mode

使用するチェックサム・アルゴリズム。すべてのチェックサム・モードは、8 ビット (ASCII) または 16 ビット Unicode (ワイド) 文字を使用できます。規定の mode 値は以下のとおりです。

モード 計算
0 8 ビットのバイト加算値。文字列内の文字の ASCII 値の合計です。したがって、$ZCRC(2,0)=50、$ZCRC(22,0)=100、$ZCRC(23,0)=101、$ZCRC(32,0)=101 となります。
1 XOR 8 ビットの 加算値
2 16 ビットのデータ・ツリー CRC-CCITT
3 16 ビットのデータ・ツリー CRC-16
4 XMODEM プロトコルの 16 ビット CRC
5 正しい 16 ビット CRC-CCITT
6 正しい 16 ビット CRC-16
7 正しい 32 ビット CRC-32。これは、OS X および Java ユーティリティ・パッケージの CRC32 クラスの cksum ユーティリティ・アルゴリズム 3 に相当します。
8 32 ビットの Murmur3 ハッシュ (x64 バリアント)
9 128 ビットの Murmur3 ハッシュ (x64 バリアント)

expression

"seed" の初期値である引数。$ZCRCstring に対して生成したチェックサムに expression を追加します。これにより、複数の文字列で連続的に $ZCRC 計算を実行し、それらの文字列を連結して $ZCRC を実行したかのように、保存済みのチェックサム値を得ることができます。$ZCRC 式のチェイニングは、きわめて長い文字列を分割して <MAXSTRING> エラーを防止するうえで効果的です。Murmur3 ハッシュ (モード 8 および 9) では expression 引数がサポートされていません。

以下の例では、文字 A、B、および C を含む文字列で mode=0 を使用し、それぞれチェックサム 198 を返します。

  write $ZCRC("ABC",0),!
  write $ZCRC("CAB",0),!
  write $ZCRC("BCA",0),!

チェックサムは、以下のようにして得られます。

  write $ASCII("A")+$ASCII("B")+$ASCII("C")  /* 65+66+67 = 198 */

以下の例は、文字列 "ABC" の各 mode により返される値を示します。

  for i=0:1:9 { write "mode ",i," = ",$ZCRC("ABC",i),! }

以下の例は、前の $ZCRC 値の出力を次の計算のシードとして使用できる様子を示します。1 から 7 までの各モードでは、"ABC" の CRC は "A"、"B"、"C" に対して連続して計算した CRC に等しく、それぞれの計算にはその前の文字の CRC がシードされています。モード 8 および 9 (Mumur3 ハッシュ) では、Murmur3 が連鎖式をサポートしていないため、CRC 計算は等しくなりません。

  for mode = 1:1:9 {

    set crc1 = $zcrc("ABC",mode)

    set crc2 = $zcrc("A",mode)
    set crc2 = $zcrc("B",mode,crc2)
    set crc2 = $zcrc("C",mode,crc2)

    write "mode ", mode," ", "crc1 = crc2: ", crc1 = crc2, !
  }

関連項目

FeedbackOpens in a new tab