4. Primitive di conversione dati (Data Conversion Primitives)
Due primitive di conversione dati (Data Conversion Primitives) sono utilizzate negli schemi definiti in questo documento:
- I2OSP - Primitiva da intero a stringa di ottetti (Integer-to-Octet-String Primitive)
- OS2IP - Primitiva da stringa di ottetti a intero (Octet-String-to-Integer Primitive)
Ai fini di questo documento, e in coerenza con la sintassi ASN.1, una stringa di ottetti (Octet String) è una sequenza ordinata di ottetti (byte a 8 bit). Questa sequenza è indicizzata dal primo (per convenzione, il più a sinistra) all'ultimo (il più a destra). Per le conversioni con interi, nelle seguenti primitive di conversione, il primo ottetto è considerato il più significativo.
4.1. I2OSP
I2OSP converte un intero non negativo in una stringa di ottetti di lunghezza specificata.
I2OSP (x, xLen)
Input (Input)
x intero non negativo da convertire
xLen lunghezza prevista della stringa di ottetti risultante
Output (Output)
X stringa di ottetti corrispondente di lunghezza xLen
Errore (Error)
"integer too large" (intero troppo grande)
Passi (Steps)
Passo 1. Se x >= 256^xLen, restituire "integer too large" e fermarsi.
Passo 2. Scrivere l'intero x nella sua rappresentazione unica in base 256 a xLen cifre:
x = x_(xLen-1) * 256^(xLen-1) + x_(xLen-2) * 256^(xLen-2) + ... + x_1 * 256 + x_0
dove 0 <= x_i < 256 (si noti che se x è minore di 256^(xLen-1), una o più cifre iniziali saranno zero).
Passo 3. Sia il valore intero dell'ottetto X_i uguale a x_(xLen-i), dove 1 <= i <= xLen. Restituire la stringa di ottetti:
X = X_1 X_2 ... X_xLen
4.2. OS2IP
OS2IP converte una stringa di ottetti in un intero non negativo.
OS2IP (X)
Input (Input)
X stringa di ottetti da convertire
Output (Output)
x intero non negativo corrispondente
Passi (Steps)
Passo 1. Siano X_1 X_2 ... X_xLen gli ottetti di X dal primo all'ultimo, e sia x_(xLen-i) il valore intero dell'ottetto X_i, dove 1 <= i <= xLen.
Passo 2. Sia:
x = x_(xLen-1) * 256^(xLen-1) + x_(xLen-2) * 256^(xLen-2) + ... + x_1 * 256 + x_0
Passo 3. Restituire x.