Aller au contenu principal

4. Primitives de conversion de données (Data Conversion Primitives)

Deux primitives de conversion de données (Data Conversion Primitives) sont utilisées dans les schémas définis dans ce document :

  • I2OSP - Primitive de conversion entier vers chaîne d'octets (Integer-to-Octet-String Primitive)
  • OS2IP - Primitive de conversion chaîne d'octets vers entier (Octet-String-to-Integer Primitive)

Aux fins de ce document, et en cohérence avec la syntaxe ASN.1, une chaîne d'octets (Octet String) est une séquence ordonnée d'octets (octets de 8 bits). Cette séquence est indexée du premier (par convention, le plus à gauche) au dernier (le plus à droite). Pour les conversions avec des entiers, dans les primitives de conversion suivantes, le premier octet est considéré comme le plus significatif.

4.1. I2OSP

I2OSP convertit un entier non négatif en une chaîne d'octets de longueur spécifiée.

I2OSP (x, xLen)

Entrée (Input)

x        entier non négatif à convertir
xLen longueur prévue de la chaîne d'octets résultante

Sortie (Output)

X        chaîne d'octets correspondante de longueur xLen

Erreur (Error)

"integer too large" (entier trop grand)

Étapes (Steps)

Étape 1. Si x >= 256^xLen, sortir "integer too large" et arrêter.

Étape 2. Écrire l'entier x dans sa représentation unique en base 256 à xLen chiffres :

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

0 <= x_i < 256 (notez que si x est inférieur à 256^(xLen-1), un ou plusieurs chiffres de tête seront nuls).

Étape 3. Soit la valeur entière de l'octet X_i égale à x_(xLen-i), où 1 <= i <= xLen. Sortir la chaîne d'octets :

X = X_1 X_2 ... X_xLen

4.2. OS2IP

OS2IP convertit une chaîne d'octets en un entier non négatif.

OS2IP (X)

Entrée (Input)

X        chaîne d'octets à convertir

Sortie (Output)

x        entier non négatif correspondant

Étapes (Steps)

Étape 1. Soit X_1 X_2 ... X_xLen les octets de X du premier au dernier, et soit x_(xLen-i) la valeur entière de l'octet X_i, où 1 <= i <= xLen.

Étape 2. Soit :

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

Étape 3. Sortir x.