メインコンテンツまでスキップ

4. Data Conversion Primitives (データ変換プリミティブ)

本文書で定義されているスキームでは、2つのデータ変換プリミティブ (Data Conversion Primitives) が使用されます:

  • I2OSP - 整数からオクテット文字列へのプリミティブ (Integer-to-Octet-String Primitive)
  • OS2IP - オクテット文字列から整数へのプリミティブ (Octet-String-to-Integer Primitive)

本文書の目的上、およびASN.1構文と一致して、オクテット文字列 (Octet String) はオクテット(8ビットバイト)の順序付きシーケンスです。このシーケンスは、最初(慣例により、最も左)から最後(最も右)まで索引付けされます。整数との変換のため、以下の変換プリミティブでは、最初のオクテットが最上位として扱われます。

4.1. I2OSP

I2OSPは、非負整数を指定された長さのオクテット文字列に変換します。

I2OSP (x, xLen)

入力 (Input)

x        変換する非負整数
xLen 結果のオクテット文字列の意図された長さ

出力 (Output)

X        長さxLenの対応するオクテット文字列

エラー (Error)

"integer too large" (整数が大きすぎる)

ステップ (Steps)

ステップ1. x >= 256^xLenの場合、"integer too large" を出力して停止します。

ステップ2. 整数xをその一意のxLen桁の256進数表現として書きます:

x = x_(xLen-1) * 256^(xLen-1) + x_(xLen-2) * 256^(xLen-2) + ... + x_1 * 256 + x_0

ここで、0 <= x_i < 256 です(注:xが256^(xLen-1)より小さい場合、1つ以上の先行桁はゼロになります)。

ステップ3. オクテットX_iの整数値をx_(xLen-i)とします。ここで、1 <= i <= xLen です。次のオクテット文字列を出力します:

X = X_1 X_2 ... X_xLen

4.2. OS2IP

OS2IPは、オクテット文字列を非負整数に変換します。

OS2IP (X)

入力 (Input)

X        変換するオクテット文字列

出力 (Output)

x        対応する非負整数

ステップ (Steps)

ステップ1. X_1 X_2 ... X_xLenをXの最初から最後までのオクテットとし、x_(xLen-i)をオクテットX_iの整数値とします。ここで、1 <= i <= xLen です。

ステップ2. 次のように定義します:

x = x_(xLen-1) * 256^(xLen-1) + x_(xLen-2) * 256^(xLen-2) + ... + x_1 * 256 + x_0

ステップ3. xを出力します。