ГОСТ Р ИСО/МЭК 8825-2-2003
10.9.3.8.1 Для получения счетчика (обозначенного т) значение битов с 6 по 1 (1—4) должно быть умножено на 16К. Целое число в битах с 6 по 1 должно выбираться максимально возможным, но таким, чтобы содержимое ассоциированного поля или списка полей было больше или равно т октетам, битам, компонентам или символам соответственно.
Примечания
1 Нефрагментированный вид имеет дело с длинами до 16К. Следовательно, фрагментация обеспечивает длины до 64К с детализацией до 16К.
2 Если в примере 10.9.3.6 значение В имеет длину 144К + 1 (то есть 64К + 64К + 16К + 1) элементов, то значение фрагментируется с первыми двумя битами первых трех фрагментов, равными 11, для указания того, что далее следует от одного до четырех блоков по 16К позиций каждый и что еще один компонент длины будет следовать за последним блоком каждого фрагмента:
|
11 I 000100 |
64К
эле- |
11 |
000100 |
64К
эле- |
11 | 000001 |
16К
эле- |
0 |0000001 |
1
эле- |
|
_1_ |
ментов |
_ |
_ |
ментов |
_1_ |
ментов |
_I_ |
мент |
|
|
Длина Значение Длина Значение Длина Значение Длина Значение |
10.9.3.8.2 Эта часть содержимого, специфицированная т, должна затем добавляться к списку полей как:
а) одно выровненное по октету битовое поле из т октетов, содержащее первые т октетов ассоциированного поля — при измерении длины в октетах, либо
б) одно выровненное по октету битовое поле из т битов, содержащее первые т битов ассоциированного поля — при измерении длины в битах, либо
в) список полей, кодирующих первые т компонентами в ассоциированном списке полей — при измерении длины в компонентах типов «множество-из» или «последовательность-из», либо
г) одно выровненное по октету битовое поле из т символов, содержащее первые т символов ассоциированного поля — при измерении длины в символах.
10.9.3.8.3 Затем следует повторно использовать процедуры 10.9 для добавления к списку полей оставшейся части ассоциированного поля или списка полей с длиной, которая является полуогра-ниченным целым числом, равным (п — т), с нулевой нижней границей.
Примечание — Если последний фрагмент, содержащий часть кодируемого значения, имеет длину, точно кратную 16К, то за ним следует завершающий фрагмент, который состоит из единственного октета компонента длины, равного 0.
10.9.3.8.4 Добавление к списку полей только части ассоциированного (ых) поля (ей) с повторным применением настоящих процедур названо процедурой фрагментации.
10.9.4 (Вариант UNALIGNED) Процедуры для варианта UNALIGNED специфицированы в 10.9.4.1—10.9.4.2 (процедуры для варианта ALIGNED специфицированы в 10.9.3):
10.9.4.1 Если детерминант длины п, который должен быть закодирован, является ограниченным целым числом с диапазоном «range» (ub — lb + 1) меньшим 64К, то п должен быть закодирован как неотрицательное двоичное целое (как определено в 10.3), используя минимальное количество битов, необходимое для кодирования «range». Если п не равен нулю, то за ним должно следовать ассоциированное поле или список полей, и настоящие процедуры завершаются. Если п равно нулю, то не должно быть дальнейшего дополнения к списку полей, и настоящие процедуры завершаются.
Примечание — Если «range» удовлетворяет неравенству 2т < «range» < 2m+1, то число битов в детерминанте длины равно т + 1.
10.9.4.2 Если детерминант длины п, который должен быть закодирован, является ограниченным целым числом, большим или равным 64К, или полуограниченным целым числом, тогда п должен быть закодирован, как определено в 10.9.3.4—10.9.3.8.4.
11 Кодирование булевского типа
11.1 Значение булевского типа должно быть закодировано как битовое поле, состоящее из единственного бита.
11.2 Бит должен быть равен 1 для TRUE и 0 — для FALSE.
11.3 Битовое поле должно быть добавлено к списку полей без детерминанта длины.
16