ГОСТ Р ИСО/МЭК 8825-2-2003
октетов, как определено в 10.3, количество занятых под кодирование октетов 1еп используется в
других разделах, которые ссылаются на настоящий подраздел для спецификации кодирования
длины.
10.9 Общие правила кодирования детерминанта длины
Примсчания
1 Процедуры настоящего подраздела вызываются для некоторой части кодирования, когда необходима
явная длина поля независимо от того, ограничен сверху счетчик длины (видимыми для PER ограничениями)
или нет. Часть кодирования, к которой относится длина, может быть битовой строкой (со счетчиком длины в
битах), строкой октетов (со счетчиком длины в октетах), символьной строкой известной кратности (со
счетчи ком длины в символах) или списком полей (со счетчиком длины в компонентах последовательности-
из или множссгва-из).
2 Вслучае варианта ALIGNED, если счетчик длины ограничен верхней границей, которая меньше 64К.
для длины используется кодирование ограниченного целого числа. Для достаточно маленьких диапазонов
результатом является битовое поле, в противном случае неограниченная длина (обозначенная я) кодируется в
выровненном по октету поле битов одним из трех способов (в порядке увеличения размера):
а) (л меньше 128) единственный октет, содержащий п с равным нулю битом 8:
б) (я меньше 16К) два октета, содержащие я с битом 8 первого октета, равным 1, и битом 7, равным
нулю:
в) (большое л) единственный октет, содержащий счетчик т с 8 и 7 битами, равными I. Счетчик т равен
от 1 до 4. а длина указывает, какой фрагмент данных следует дальше (лз, умноженное на I6K элементов). За
определенным значением т фрагментом следует другая длина кодирования для оставшихся данных.
3 В случае варианта liNALIGNED, если счетчик длины ограничен верхней границей, которая меньше
(>4К. для кодирования длины в минимальном количестве битов, необходимых для представления диапазона,
используется кодирование ограниченного целого числа. В противном случае неограниченная длина (обозна
ченная я) кодируется в битовое пате способом, описанным в примечании 2.
10.9.1 Процедуры настоящего подраздела не вызываются, если в соответствии со специфика
циями последующих разделов значение детерминанта длины п фиксировано определением типа (с
видимыми для PER ограничениями), и это значение меньше 64К.
10.9.2 Процедуры настоящего подраздела вызываются в дополнение к списку полей, содержа
щему поля или списки полей, с предшествующим детерминантом длины п. который определяет:
а) длину в октетах ассоциированного поля (единицами являются октеты), либо
б) длину в битах ассоциированного поля (единицами являются биты), либо
в) число компонентов, закодированных в ассоциированном списке полей (единицами явля
ются компоненты множества-нз
или
последовательности-из), либо
г) число символов в значении ассоциированного типа символьной строки известной кратности
(единицами являются символы).
10.9.3 (Вариант ALIGNED) Процедуры для варианта ALIGNED специфицированы в 10.9.3.1—
10.9.3.8.4. (Процедуры для варианта UNALIGNED специфицированы в 10.9.4.)
10.9.3.1 В результате анализа определения типа (установленного в последующих разделах)
определяется, будет ли детерминант длины (целое число п):
а) обычно маленькой длиной с нижней границей lb = I; либо
б) ограниченным целым числом с нижней границей lb а 0 и верхней границей ub < 64К, либо
в) полуограничемным целым числом с нижней границей 1Ь г 0 или ограниченным целым
числом с нижней границей 1Ь£ 0 и верхней границей ub £ 64К.
10.9.3.2 Подраздел, вызывающий процедуры настоящего подраздела, должен определить зна
чения для нижней !Ь (равное нулю, если длина неограничена) и верхней ub границ длины, ub не
устанавливается, если нет верхней границы, определимой по видимым для PER ограничениям.
10.9.3.3 Когда детерминант длины является ограниченным целым числом с ub < 64К, список
полей будет добавлен к кодированию этого ограниченного целого числа для детерминанта длины,
как определено в 10.5. Если п не равно нулю, то за ним должно следовать ассоциированное поле или
список полей, и процедура завершается. Если п равно нулю, то к списку полей ничего не
добавляется, и процедура завершается.
Примечав ия
1 Например:
А :: » Foo (SIZE (3..6)) —Длина кодируется и 2-битовом поле
В :: = Foo (SIZE (40000..40254)) -- Длина кодируется в 8-битовом поле
С ::Foo (SIZE (0..32000)) —Длина кодируется в 2 октета, выровненного по октету битового поля
D :: = Foo (SIZE (64000)) —Длина нс кодируется
14