Статус документа
Статус документа

ГОСТ Р ИСО/МЭК 8825-2-2003 Информационная технология (ИТ). Правила кодирования АСН.1. Часть 2. Спецификация правил уплотненного кодирования (PER)

     10.5 Кодирование ограниченного целого числа


Примечание - На настоящий подраздел ссылаются другие разделы, а сам он ссылается на предыдущие подразделы при создании неотрицательного двоичного целого или двоично-дополнительного до 2 целого кодирования. Для варианта UNALIGNED значение всегда кодируется в минимальном количестве битов необходимом для представления диапазона (определенного в 10.5.3). Остальная часть настоящего примечания относится к варианту ALIGNED. Когда диапазон меньше или равен 255, значение кодируется в битовом поле минимального для диапазона размера. Когда диапазон равен 256, значение кодируется в единственном октете выровненного по октету битового поля. Когда диапазон от 257 до 64К, значение кодируется в два октета выровненного по октету битового поля. Когда диапазон больше 64К, он игнорируется, и значение кодируется в выровненное по октету битовое поле, которое содержит минимальное для значения количество октетов. В последнем случае дальнейшие процедуры (см. 10.9) кодируют и поле длины (обычно один октет) для указания длины кодирования. В других случаях длина кодирования не зависит от кодируемого значения и не кодируется явно.

10.5.1 Настоящий подраздел специфицирует отображение из ограниченных целых чисел либо в битовое поле, либо в выровненное по октету битовое поле, которое используется в последующих разделах настоящего стандарта.

10.5.2 Процедуры данного подраздела вызываются, если только ограниченное целое число, которое должно быть закодировано, доступно, а значения нижней границы, , и верхней границы, , были определены из нотации типа (после применения видимых для PER ограничений).

Примечание - Нижняя граница не может быть определена, если MIN является бесконечным числом, а верхняя граница не может быть определена, если МАХ является бесконечным числом. Например, ни верхняя, ни нижняя границы не могут быть определены для INTEGER (MIN..MAX).

10.5.3 Определим диапазон "range" как целое значение ; пусть значение, которое должно быть закодировано, есть .

10.5.4 Если "range" имеет значение 1, то результат кодирования должен быть пустым битовым полем (без битов).

10.5.5 Существует пять других случаев (приводящих к разным кодированиям), в одном из которых применяется вариант UNALIGNED, а в четырех других - вариант ALIGNED.

10.5.6 В случае варианта UNALIGNED значение должно быть закодировано как неотрицательное двоичное целое в битовом поле, как определено в 10.3, с минимальным число битов, необходимым для представления диапазона.

Примечание - Если "range" удовлетворяет неравенству <"range", то число битов равно .

10.5.7 В случае варианта ALIGNED кодирование зависит от того, что:

а) "range" меньше или равен 255 (случай битового поля);

б) "range" равен 256 (случай одного октета);

в) "range" больше 256, но меньше или равен 64К (случай двух октетов);

г) "range" больше 64К (случай неопределенной длины).

10.5.7.1 (Случай битового поля). Если диапазон "range" меньше или равен 255, то применение настоящего раздела требует сгенерировать битовое поле с числом битов, указанным ниже в таблице и содержащим значение в виде неотрицательного двоичного целого кодирования в битовом поле, как определено в 10.3.

Диапазон "range" 2

Размер битового поля (в битах)

2

1

3, 4

2

5-8

3

9-16

4

17-32

5

33-64

6

65-128

7

129-255

8



10.5.7.2 (Случай одного октета). Если диапазон "range" имеет значение 256, то значение должно быть закодировано в одном октете выровненного по октету битового поля в виде неотрицательного двоичного целого кодирования, как определено в 10.3.

10.5.7.3 (Случай двух октетов). Если диапазон "range" имеет значение, большее или равное 257 и меньшее или равное 64К, то значение должно быть закодировано в двух октетах выровненного по октету битового поля в виде неотрицательного двоичного целого кодирования, как определено в 10.3.

10.5.7.4 (Случай неопределенной длины). В противном случае значение должно быть закодировано в неотрицательном двоичном целом виде в выровненном по октету битовом поле с минимальным количеством октетов, как определено в 10.3, а количество занятых под кодирование октетов len используется другими разделами, ссылающимися на данный раздел, для спецификации кодирования длины.