Domanda

stavo leggendo

  • X.690 "Tecnologia dell'informazione - ASN.1 Regole di codifica: specifica delle regole di codifica di base (BER), regole di codifica canonica (CER) e regole di codifica distinta (DER)"

In particolare, §8.5.6.4 (d), per quanto riguarda una codifica binaria di valori reali con una mantissa e esponente a lunghezza variabile, recita come segue:

"Se i bit da 2 a 1 sono 11, Quindi il secondo contenuto ottetto codifica il numero di ottetti, X dire, (come numero binario non firmato) utilizzato per codificare il valore dell'esponente e il terzo fino al (X più 3)th (inclusi) I contenuti degli ottetti codificano il valore dell'esponente come numero binario del complemento di dueil valore di X deve essere almeno uno; I primi nove bit dell'esponente trasmesso non devono essere tutti zeri o tutti. "

Ciò è incoerente, poiché gli ottetti da "il terzo fino al (x più 3)RD"In realtà è x+1 ottetti.

Qualcuno è in grado di chiarire questa sezione?

Presumo che dovrebbe leggere neanche

"... quindi il secondo contenuto ottetto codifica uno in meno di il numero di ottetti, X dire,..."

o

"... il terzo fino al (x più 2)nd (incluso) Contenuti Otto ... "

Ed è il valore minimo di X Davvero 1, o è 0 significato 1 ottetto?

Addendum: Se qualcuno può fornirmi alcuni dati di test di valori in variazione di ber (stringhe di ottetto con i loro significati) che sarebbero utili.

Quello che ho finora è

  • 09 00 = 0 (zero)
  • 09 01 40 = +Inf (Infinity)
  • 09 01 41 = -inf
  • 09 08 03 2B 31 2E 30 65 2B 30 = "+1.0E+0" = 1.0 (decimale esatto)
  • 09 05 80 Fe 55 55 55 = 1398101.25 (binario, 0x555555 * 2^-2)

Un esempio di cui non sono sicuro è:

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

Inoltre, non sembra esserci alcuna codifica definita per NAN (non un numero).

È stato utile?

Soluzione

Penso che questa sia solo una questione di indicizzazione.

Content Ottot #1 contiene alcune cose (tipo di codifica, bit del segno, base, fattore di scala e formato esponente).

Se il formato esponente è '11', allora l'ottetto successivo (Ottetto di contenuto #2) contiene un numero X che rappresenta il numero di ottetti utilizzati per codificare il valore dell'esponente. Il terzo ottetto di contenuto contiene parte del valore esponente. L'ultimo ottetto di contenuto è x+3.

CO1 (roba) CO2 (x) CO3 (valore esponente) ... CO [x+3

Il valore minimo per x è 1. Se x = 1 quindi CO [x+3] = CO4, il che significa che il numero minimo di ottetti di contenuto per il valore esponente è due. La rappresentazione più breve di questa forma è

CO1 CO2 CO3 CO4

Ciò significherebbe che '09 00 'non è una codifica valida della Sezione 8.5.6. Come è '09 01 04 'e '09 01 41'.

Le plus-infinity e il meno-infinito sono codificate tramite le regole della sezione 8.5.8 che non sono compatibili con le regole della Sezione 8.5.6.

Codificare zero secondo le regole della Sezione 8.5.6 va così

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)

Quindi il contenuto dell'ottetto n. 1 = 1000 0111 è 0x87

Content Ottot #2 = 0x01 (poiché il valore più piccolo di X è 1)

Contenuto Ottetto #3 = 0x00

Contenuto Ottetto #4 = 0x01

Content Ottot #3 e #4 danno un valore esponente di 1

(zero * one) ^ one = zero

Altri suggerimenti

NAN è definito in 8.5.9 accanto all'infinito e sarebbe 09 01 42

Questo

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

è secondo 8.5.7.4 d) non valido, CO2 (la x) "deve essere almeno uno". Ma ottengo anche il tuo risultato quando ignoro questi vincoli.

Meglio: 09 03 80 FC 01 = 0.0625 (binario, 0x01 * 2^-4)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top