Question

J'ai lu

  • X.690 "Technologie de l'information - ASN.1 Règles de codage: Spécification des règles de codage de base (BER), Règles de codage canonique (CER) et des règles de codage distinguées (DER)"

    En particulier, §8.5.6.4 (d), concernant un codage binaire de valeurs réelles avec une longueur variable MANTISSA et un exposant, se lit comme suit:

    "Si les bits 2 à 1 ont 11, alors le deuxième contenu d'octet code le nombre d'octets, x disons, (comme un nombre binaire non signé) Utilisé pour coder la valeur de l'exposant et la troisième à la ( x plus 3) TH (inclus) des octets encode la valeur de l'exposant comme complément de deux Numéro binaire ; la valeur de x doit être au moins une ; les neuf premiers bits de l'exposant transmis ne doivent pas être tous des zéros ou tous ceux-ci. " / p>

    Ceci est incompatible, comme les octets de "le troisième à la (x plus 3) [rd] " est en réalité x + 1 octets.

    Est-ce que quelqu'un est capable de clarifier cette section?

    Je suppose qu'il devrait lire soit

    "... Puis le deuxième contenu d'octet code un de moins que le nombre d'octets, x dites, ..."

    ou

    "... le troisième jusqu'à la (x plus 2) nd (inclus) Contenu octets ..."

    et, est la valeur minimale de x vraiment 1, ou est-ce 0 Signification 1 octet?

    addendum : Si quelqu'un peut me fournir quelques données de test de valeurs codées variables (cordes d'octet avec leurs significations) qui seraient utiles.

    Qu'est-ce que j'ai jusqu'à présent est

    • 09 00= 0 (zéro)
    • 09 01 40= + INF (Infinity)
    • 09 01 41= -INF
    • 09 08 03 2B 31 2E 30 65 2B 30="+ 1.0E + 0"= 1,0 (décimal exact)
    • 09 05 80 Fe 55 55 55= 1398101.25 (binaire, 0x555555 * 2 ^ -2)

      Un exemple je ne suis pas sûr de:

      • ? 09 06 83 00 FC 00 00 01= 0,0625 (binaire, 0x000001 * 2 ^ -4)?

        De plus, il semble y avoir un codage défini pour NAN (pas un nombre).

Était-ce utile?

La solution

Je pense que ce n'est qu'une question d'indexation.

Contenu octet n ° 1 contient des éléments (type de codage, bit de signalisation, base, facteur d'échelle et format exposant).

Si le format exposant est "11", le prochain octet (Contenu octet n ° 2) contient un numéro X qui représente le nombre d'octets utilisés pour coder la valeur de l'exposant. Le troisième octet de contenu contient une partie de la valeur de l'exposant. Le dernier octet de contenu est x + 3.

CO1 (STUB) CO2 (x) CO3 (valeur d'exposition) ... CO [x + 3]

La valeur minimale pour x est 1. Si x= 1, alors co [x + 3]= CO4, ce qui signifie que le nombre minimal d'octets de contenu pour une valeur exponante est deux. La représentation la plus courte de ce formulaire est

CO1 CO2 CO3 CO4

Cela signifierait que '09 00 'n'est pas un codage valide de la section 8.5.6. Comme le 09 01 04 'et '09 01 41'.

Le plus-infini et moins-infini sont codés via les règles de la section 8.5.8 qui n'est pas compatible avec les règles de la section 8.5.6.

codage zéro par les règles de la section 8.5.6 va comme ça

CO1:8  =  1      (Content Octet #1 bit 8)
CO1:7  =  x =  0 (Content Octet #1 bit 7 is dont care, but I'll use 0 for positive)
CO1:65 = 00      (Content Octet #1 bits 6 and 5 is 00 for base two)
CO1:43 =  x = 01 (Content Octet #1 bits 4 and 3 is scaling factor, so we don't care but I'll make it 01 for a value of one)
CO1:21 = 11      (Content Octet #1 bits 2 and 1 is the exponent format and '11' is the format in question)

SO Content Octet # 1= 1000 0111 est 0x87

Contenu octet # 2= 0x01 (car la plus petite valeur de x est 1)

Contenu octet # 3= 0x00

Contenu octet # 4= 0x01

Contenu octets n ° 3 et n ° 4 donnent une valeur d'exposition de 1

(zéro * un) ^ un= zéro

Autres conseils

Nan est défini dans 8.5.9 à côté de l'infini et serait 09 01 42

Ceci

09 06 83 00 FC 00 00 01= 0,0625 (binaire, 0x000001 * 2 ^ -4)

est selon 8.5.7.4 D) non valide, le CO2 (X) "doit au moins être".Mais je reçois aussi votre résultat lorsque j'ignore ces contraintes.

meilleur: 09 03 80 fc 01= 0,0625 (binaire, 0x01 * 2 ^ -4)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top