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
où 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.