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

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

     9.21 Определение способов кодирования для простейших классов кодирования

9.21.1 Правила кодирования для некоторых простейших классов кодирования могут определяться с помощью дружественного к пользователю синтаксиса, который указан в командах WITH SYNTAX определений класса кодирования (см. разделы 23 и 25). Этот синтаксис может также использоваться при определении правил кодирования для классов кодирования, полученных из этих простейших классов кодирования (при помощи операторов присвоения класса кодирования).

9.21.2 Нотация, которая используется для определений класса кодирования в разделах 23 и 25, основана на нотации, примененной для определения класса информационных объектов. Этот синтаксис (и связанная с ним семантика) определен путем ссылки на ИСО/МЭК 8824-2 с учетом изменений из приложения В.

9.21.3 Определение класса кодирования указывает информацию, которая должна поставляться с целью определить правила кодирования для конкретных классов кодирования. Набор правил кодирования, который может быть определен этим способом, не охватывает, конечно, все возможные правила, но считается достаточным для спецификаций кодирования, которые потребуются, вероятно, пользователям ECN.

9.21.4 Эти определения класса кодирования описывают серии полей (с соответствующими типами АСН.1 и семантиками). Правила кодирования описываются путем выдачи значений этих полей. Значения этих полей фактически дают значения ряда признаков кодирования, которые совместно определяют кодирование.

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

9.21.6 Пространство кодирования может иметь свой передний край, выровненный (сфазированный) по некоторой границе (например, границе октета) путем предварительного заполнения пространства кодирования, а его размер может быть фиксированным или переменным. Код значения помещается внутри него, возможно с левым или правым выравниванием и с окружающим заполнением. Если пространство кодирования имеет переменный размер, то либо кодирование значения должно быть саморазграничивающим, либо должен быть некоторый внешний механизм, позволяющий декодеру определять размер пространства кодирования. Имеются разные механизмы для этого определения.

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

9.21.8 Таким образом, имеются три широкие категории необходимой информации:

- первая относится к пространству кодирования, в котором размещаются кодовые последовательности;

- вторая относится к способу отображения абстрактного значения в биты (кодирование значения) и к размещению таких битов внутри пространства кодирования;

- третья относится к какой-либо реверсии битов.

9.21.9 На рисунке 1 показаны пространство кодирования (с предварительным заполнением) и код значения (с предварительным заполнением значения и последующим заполнением значения). Рисунок 1 иллюстрирует также определение единицы пространства кодирования. Пространство кодирования всегда является целым, кратным этому указанному числу битов.


Кодирование затем добавляется к "битам в строке", возможно с реверсией битов, октетов и т.п.

Рисунок 1 - Пространство кодирования, кодирование значения и понятия "заполнение"

9.21.10 Если пространство кодирования не имеет одного размера для всех значений, кодируемых объектом кодирования, то необходим некоторый дополнительный механизм для определения фактического пространства кодирования, используемого в экземпляре кодирования.

9.21.11 Возможно также указать произвольное значение предварительного заполнения кодера (за пределами, необходимыми для выравнивания), которое заканчивается, когда значение более раннего указателя старта укажет начало некоторого поля.

9.21.12 Определение кодирования для простейшего класса кодирования битового поля состоит из следующих шагов:

- указать выравнивание (если оно есть), необходимое для переднего края пространства кодирования (относительно точки выравнивания - обычно начала кодирования типа верхнего уровня, то есть типа, к которому прикладывается набор объектов кодирования в ELM) (см. 22.2);

- указать форму какого-либо необходимого заполнения для этой точки (предварительное заполнение пространства кодирования) (см. 22.2);

- указать (если необходимо) поле, которое обеспечит указатель для начальной точки пространства кодирования (см. 22.3);

- указать кодирование абстрактных значений в биты (кодирование значения);

- указать единицы пространства кодирования (пространство кодирования всегда будет целым, кратным этим единицам) (см. 22.4);

- указать размер пространства кодирования в этих единицах. Он может быть фиксированным (с использованием знания целого числа или границ размера, связанных с кодируемыми абстрактными значениями) или переменным (разным для каждого абстрактного значения). Спецификация может также (во всех случаях) указать на использование определителя длины, который должен кодироваться с длиной поля и либо создавать возможность декодирования, либо предоставлять избыточную информацию (в случае пространства кодирования с фиксированным размером), которую декодер может проверять (см. 22.4);

- указать выравнивание кодирования значения внутри пространства кодирования (см. 22.8);

- указать форму какого-либо необходимого заполнения от начала пространства кодирования до начала кодирования значения (предварительное заполнение значения) (см. 22.8);

- указать форму какого-либо необходимого заполнения между концом кодирования значения и концом пространства кодирования (последующее заполнение значения) (см. 22.8);

- указать какие-либо необходимые реверсии битов для содержания пространства кодирования до добавления битов к кодированию, сделанному ранее (см. 22.12).