Passa al contenuto principale

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.