ГОСТ Р ИСО/МЭК 8825-3—2016
{joint-iso-itu-t(2) asn1(1) ecn(4) examples(5) asn1-module1(2)};
ENCODE «MyPDU WITH ExamplelEncodings
COMPLETED BY PER-BASIC-UNALIGNED
END
D.2 Специализированные примеры
Примеры в этом разделе показывают, как можно изменять отдельные части какого-либо кодирования за
данного типа с целью минимизировать размер закодированных сообщений. Кодовые последовательности PER
basic unaligned обычно создаются в виде сжатых по возможности кодовых последовательностей. Однако имеются
случаи, когда желательны специализированные кодирования:
- имеются некоторые специальные виды семантики, связанные с такими компонентами сообщения, которые
дают возможность удалить некоторые вспомогательные поля, генерируемые PER;
- пользователи желают применять разные кодирования для вспомогательных полей PER. генерируемых по
умолчанию, таких как поля детерминанта с переменной шириной.
D.2.1 Кодирование путем распределения значений по альтернативным структурам кодирования
D.2.1.1 Присвоение АСН.1 равно:
NormallySmallValues ::= INTEGER (0..1000)
-
Обычно значения находятся в диапазоне 0—63. но иногда используется полный диапазон значений.
D.2.1.2 PER кодировал бы тип с использованием 10 битов. Мы хотим минимизировать размер кодирования
так. чтобы нормальный случай кодировался с использованием как можно меньшего числа битов.
П р и м е ч а н и е — В этом примере мы применяем простой прямой подход. Более сложный подход с ис
пользованием кодирования Хаффмана приведены в Е.1.
D.2.1.3 Присвоением обьекта кодирования (см. 19.6) является:
nonnallySmallValuesEncoding-1 «NormallySmallValues ::= {
USE «NormallySmallValuesStruct-1
MAPPING DISTRIBUTION {
0..63 TO small.
REMAINDER TO large }
WITH PER-BASIC-UNALIGNED)
D.2.1.4 Присвоением структуры кодирования является:
«NormallySmallValuesStruct«CHOICE {
small #INT (0..63).
large #INT (64..1000)}
D.2.1.5 Используемые обычно значения кодируются с помощью поля «small», а значения, используемые
только изредка, кодируются с помощью поля «large». Выбор мехщу этими двумя возможностями осуществляется
генерируемым PER однобитовым полем селектора. Длина поля «small» равна 6 битам, а длина поля «large» — 10
битам, поэтому обычный случай кодируется 7 битами, а редкий случай — 11 битами.
D.2.2 Кодирование путем отображения упорядоченных абстрактных значений в альтернативную
структуру кодирования
D.2.2.1 В примере D.2.1 использовано явное определение способа отображения диапазонов значений в поля
структуры кодирования. Такой же эффект можно получить более просто, используя «отображение упорядоченных
абстрактных значений». Однако в качестве иллюстрации мы здесь еще изменим требование: вспомогательные
длинные значения могут появляться изредка, а присвоение АСН.1. по предположению, не содержит ограничений
для них.
D.2.2.2 Присвоениями объектов кодирования (см. 19.5) являются:
normallySmallValuesEncoding-2 «NormallySmallValues ::= {
USE «NormallySmallValuesStruct2
MAPPING ORDERED VALUES
WITH NormallySmallValuesTag-encoding-plus-PER)
normallySmallValuesTag-encoding «TAG :;= {
ENCODING-SPACE
SIZE 1}
175