2016-02-04 3 views
1

Je suis très novice dans le codage ANS1 et j'ai besoin de conseils.Comment encoder en utilisant ASN.1?

... en supposant que je l'ANS1 suivante

MyType ::= SEQUENCE 
{ 
--lets assume hex value here is "01-01" for myText1 
myText1 [0] IMPLICIT OCTET STRING OPTIONAL, 
myCheck [1] IMPLICIT INTEGER {doNow(0), doLater(1)} DEFAULT doNow, 
myText2 [2] OCTET STRING 
} 

Si la valeur de myText2 est « 12-34 », sera la chaîne hexagonale suivant 30-08-01-01-01-01-04-02-12-34 être considéré comme données codées correctement?

... si l'option myText1 est absent volonté, le codage soit

30-06-01-01-04-02-12-34

ou

30-07-00-01-01-04-02-12-34?

Répondre

2

Disons que nous voulons coder la valeur {myText1 '0101'H, myCheck 0, myText2 '1234'H} les règles de codage BER:

30 0D     SEQUENCE (universal tag 16, constructed) of length 13 
    80 02 01 01  context specific implicit tag 0, length 2, value 0101 
    81 01 00   context specific implicit tag 1, length 1, value 00 
    C2 04    context specific explicit tag 2, length 4 
     04 02 12 34  universal tag 4, length 2, value 1234 

Si un champ facultatif est omis, l'encodage correspondant n'est pas, par exemple, si nous laissons myText1 (notez que myText2 est pas facultatif):

30 09     SEQUENCE of length 9 
    81 01 00   context specific implicit tag 1, length 1, value 00 
    C2 04    context specific explicit tag 2, length 4 
     04 02 12 34  universal tag 4, length 2, value 1234 

Notez l'utilisation de l'outil de forme de construction lors du codage de la valeur de séquence et la valeur myText2 explicitement étiqueté. Notez encore la différence entre le marquage implicite et explicite.