Zum Hauptinhalt springen

4. Datenkonvertierungsprimitive (Data Conversion Primitives)

In den in diesem Dokument definierten Schemata werden zwei Datenkonvertierungsprimitive (Data Conversion Primitives) verwendet:

  • I2OSP - Ganzzahl-zu-Oktettzeichenkette-Primitiv (Integer-to-Octet-String Primitive)
  • OS2IP - Oktettzeichenkette-zu-Ganzzahl-Primitiv (Octet-String-to-Integer Primitive)

Für die Zwecke dieses Dokuments und in Übereinstimmung mit der ASN.1-Syntax ist eine Oktettzeichenkette (Octet String) eine geordnete Sequenz von Oktetten (8-Bit-Bytes). Diese Sequenz wird vom ersten (per Konvention, ganz links) bis zum letzten (ganz rechts) indiziert. Für Konvertierungen mit Ganzzahlen wird in den folgenden Konvertierungsprimitiven das erste Oktett als das höchstwertige behandelt.

4.1. I2OSP

I2OSP konvertiert eine nichtnegative Ganzzahl in eine Oktettzeichenkette mit spezifizierter Länge.

I2OSP (x, xLen)

Eingabe (Input)

x        zu konvertierende nichtnegative Ganzzahl
xLen beabsichtigte Länge der resultierenden Oktettzeichenkette

Ausgabe (Output)

X        entsprechende Oktettzeichenkette der Länge xLen

Fehler (Error)

"integer too large" (Ganzzahl zu groß)

Schritte (Steps)

Schritt 1. Wenn x >= 256^xLen, Ausgabe "integer too large" und Stopp.

Schritt 2. Schreibe die Ganzzahl x in ihrer eindeutigen xLen-stelligen Basis-256-Darstellung:

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

wobei 0 <= x_i < 256 (beachte, dass wenn x kleiner als 256^(xLen-1) ist, eine oder mehrere führende Ziffern null sein werden).

Schritt 3. Sei der ganzzahlige Wert des Oktetts X_i gleich x_(xLen-i), wobei 1 <= i <= xLen. Gebe die Oktettzeichenkette aus:

X = X_1 X_2 ... X_xLen

4.2. OS2IP

OS2IP konvertiert eine Oktettzeichenkette in eine nichtnegative Ganzzahl.

OS2IP (X)

Eingabe (Input)

X        zu konvertierende Oktettzeichenkette

Ausgabe (Output)

x        entsprechende nichtnegative Ganzzahl

Schritte (Steps)

Schritt 1. Seien X_1 X_2 ... X_xLen die Oktette von X vom ersten bis zum letzten, und sei x_(xLen-i) der ganzzahlige Wert des Oktetts X_i, wobei 1 <= i <= xLen.

Schritt 2. Sei:

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

Schritt 3. Gebe x aus.