Кодирование и декодирование ASN.1 REAL с BER

Извините за мой плохой английский. У меня есть число в десятичной системе: 0,15625.

(Это пример) http://www.strozhevsky.com/free_docs/asn1_in_simple_words.pdf (Стр. 5)

По правилу BER ASN.1 — закодировано в восьмеричном виде: 09 03 90 FE 0A (Это правильное решение)

http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf
Стандарт ASN.1 (8.5 — REAL)

1 байт:

(8-7) Class - Universal - 00
(6) P/C - Primitive - 0
(5-1) Tag Number - 01001(REAL)

ИТОГО: 00001001 (2) = 09 (16) (Правильный)

2 байта:

     (8) binary encoding - 1
_____________________
(7) When binary encoding is used (bit 8 = 1), then if the mantissa M is
non-zero, it shall be represented by a sign S, a positive integer value N
and a binary scaling factor F, such that:
M = S × N × 2F
Bit 7 of the first contents octets shall be 1 if S is –1 and 0 otherwise.
What I would have bit 7?
_____________________
(6-5) base 8 - 01
_______________________
(3-4) Bits 4 to 3 of the first contents octet shall encode the value of
the binary scaling factor F as an unsigned binary
integer. I don't have scaling factor. - 00
_____________________
(2-1) 8.5.6.4 Bits 2 to 1 of the first contents octet shall encode
the format of the exponent as follows: I do not know how to determine
what my value will be here. (Poor understand English). I think 11?

Итого: 1? 010011 — НЕ РАВНО 03 Зачем? (Неправильно)

Что это 90? Вызов октета? Как это найти? Книга не говорит, или я просто не понимаю.

В FE закодированное число -2 (экспонента), как я могу перевести FE, не получить 254, а -2? Возможно, он содержит информацию о байте: 90?

Спасибо за то, что вы слушали.

0

Решение

В разделе «Глава 1. Общие правила кодирования ASN.1» говорится, что кодировка состоит из трех разделов:

  1. информационный блок
  2. блок длины
  3. блок значений

Блок длины указывает длину блока значений.

Кодировка 0,15625 как октеты 09 03 80 FB 05 ломается так:

09       - information block (1 octet)
03       - length block (1 octet)
80 FB 05 - value block (3 octets)

Сам блок значений состоит из трех разделов: информационный октет, блок для экспоненты и блок для мантиссы. В этом случае мантисса равна M = 5 (101 в основании 2), а показатель степени равен E = -5. Следовательно, блок значений:

80       - information octet
FB       - the exponent block (FB = -5)
05       - the mantissa block (5)

Информационный октет определяет различные части информации, включая:

  • что мы кодируем реальное число
  • мы используем в базе 2, и
  • число неотрицательно (> = 0)

Чтобы ответить на ваш вопрос о том, что FE интерпретируется как -2, это — то, как отрицательные числа представлены в арифметике с дополнением 2s (больше информации). Для однозначных чисел имеем:

FF   ->  -1
FE   ->  -2
FD   ->  -3
...
80   ->  -128
7F   ->  +127
7E   ->  +126
3

Другие решения