ГОСТ Р ИСО/МЭК 8825-2-2003
16.5 Если строка октетов ограничена нулевой длиной (ub = 0), то она не должна кодироваться (нет дополнений к списку полей), и процедуры этого раздела завершаются.
16.6 Если все значения строки октетов ограничены одной длиной (ub = lb) и эта длина меньше или равна двум октетам, то строка октетов должна быть помещена в битовое поле с числом битов, равным кратной восьми ограниченной длине ub, которое должно быть добавлено к списку полей без детерминанта длины, и процедуры этого раздела завершаются.
16.7 Если все значения строки октетов ограничены одной длиной (ub = lb) и эта длина больше двух октетов, но меньше 64К, то строка октетов должна быть помещена в выровненное по октету битовое поле с ограниченной длиной ub октетов, которое должно быть добавлено к списку полей без детерминанта длины, и процедуры этого раздела завершаются.
16.8 Если 16.5—16.7 не применимы, то строка октетов должна быть помещена в выровненное по октету поле битов длиной п октетов, и должны быть вызваны процедуры 10.9 для добавления этих п октетов выровненного по октету битового поля к списку полей с предшествующим детерминантом длины, равным п октетам, в виде ограниченного целого числа, если ub установлена, или в виде полуограниченного целого числа, если ub не установлена (lb устанавливается так, как определено выше).
Примечание — Процедуры фрагментация могут применяться после 16К, 32К, 48К или 64К октетов.
17 Кодирование вырожденного типа
Примечание — Вырожденный тип является, по существу, держателем места и имеет практическое значением только как компонент выбора или факультативный компонент множества или последовательности. Идентификация вырожденного типа в выборе или его присутствие в качестве факультативного элемента осуществляется в настоящих правилах кодирования без необходимости иметь октеты, представляющие null. Следовательно, значения null никогда не вносят вклад в октеты кодирования.
Не должно быть дополнения к списку полей для вырожденного значения.
18 Кодирование типа «последовательность»
Примечание — Тип «последовательность» начинается с преамбулы, которая является битовой картой. Если тип «последовательность» не имеет маркера расширения, то в битовой карте, закодированной как битовое поле фиксированной длины, записано только наличие или отсутствие в типе заданных по умолчанию и факультативных компонентов. Если тип «последовательность» имеет маркер расширения, то битовая карта следует за единственным битом, который сообщает, присутствуют ли фактически в кодировании значения расширяющих дополнений. Преамбула кодируется без какого-либо детерминанта длины при условии, что она имеет длину меньше 64К битов, в противном случае детерминант длины кодируется для получения фрагментации. За преамбулой следуют поля, которые по порядку кодируют все компоненты. Если есть расширяющие дополнения, то непосредственно перед первым из них стоит кодирование (как полуограниченного целого числа) счетчика количества расширяющих дополнений в кодируемом типе, за которым следует битовая карта длиной, равной этому счетчику, в которой записано наличие или отсутствие значений каждого расширяющего дополнения. За этим следуют кодирования расширяющих дополнений так, как если бы они были значениями полей открытого типа.
18.1 Если тип «последовательность» имеет маркер расширения, то сначала к списку полей в поле битов длины должен быть добавлен один бит. Он должен быть единицей, если в данном кодировании присутствуют значения расширяющих дополнений, и нулем — в противном случае. (Далее по тексту этот бит называется «бит расширения»). Если маркер расширения отсутствует, то бит расширения не добавляется.
18.2 Если тип «последовательность» имеет п компонентов в корне расширения, которые помечены как OPTIONAL или DEFAULT, то для добавления к списку полей должно быть создано одно битовое поле с п битами. Биты этого поля, взятые по порядку, должны кодировать наличие или отсутствие кодирования каждого факультативного или заданного по умолчанию компонента в типе «последовательность». Значение бита 1 кодирует присутствие компонента, а значение бита 0 — отсутствие. Головной бит в преамбуле должен кодировать наличие или отсутствие первого факультативного или заданного по умолчанию компонента, а завершающий бит должен кодировать наличие или отсутствие последнего факультативного или заданного по умолчанию компонента.
18.3 Если п < 64К, то битовое поле должно быть добавлено к списку полей. Если п > 64К, то
20