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.