ГОСТ Р ИСО/МЭК 8825-2-2003
выражения любого перечисления. В присутствии маркера расширения перечислимый тип кодируется как обычно маленькое неотрицательное целое число, если значение не находится в корне расширения.
13.1 Перечисления в корне должны быть отсортированы в возрастающем порядке их перечислимых значений, а затем им должен быть присвоен индекс перечисления, начинающийся с нуля для первого с шагом единица до последнего перечисления в отсортированном списке. Расширяющим дополнениям (которые всегда определяются в возрастающем порядке) должен быть присвоен индекс перечисления, начинающийся с нуля для первого с шагом единица до последнего перечисления в расширяющих дополнениях.
Примечание — ГОСТ Р ИСО/МЭК 8824-1 требует, чтобы каждое последующее расширяющее дополнение имело значение перечисления большее, чем последнее.
13.2 Если в определении перечислимого типа отсутствует маркер расширения, то должен быть закодирован индекс перечисления. Его кодирование должно быть таким, как если бы это было значение ограниченного целочисленного типа, для которого нет маркера расширения, с равной 0 нижней границей, а верхняя граница равна самому большому индексу перечисления, ассоциированному с типом, и эта процедура завершается.
13.3 Если маркер расширения присутствует, то к списку полей в битовом поле длины должен быть добавлен один бит. Он должен быть равен 1, если значение, которое должно быть закодировано, не находится в корне расширения, и нулю — в противном случае. В первом случае дополнительные перечисления должны быть отсортированы в соответствии с 13.1, а значение должно быть добавлено к списку полей как обычно маленькое неотрицательное целое число, значением которого является индекс перечисления дополнительного перечисления при lb, равной 0, и эта процедура завершается. Во втором случае значение должно быть закодировано так, как если бы маркер расширения отсутствовал, как определено в 13.2.
Примечание — Нет видимых для PER ограничений, которые могут применяться к перечислимому
типу.
14 Кодирование действительного типа
Примечание — Для действительного типа используют октеты содержимого CER/DER с предшествующим детерминантом длины, который на практике будет одним октетом.
14.1 Если основанием абстрактного значения является 10, то основанием закодированного значения должно быть 10, а если основанием абстрактного значения является 2, то основанием закодированного значения должно быть 2.
14.2 Должно использоваться кодирование для REAL, определенное для правил канонического и различающего кодирования в ГОСТ Р ИСО/МЭК 8825-1, приводящее к выровненному по октету битовому полю, которые являются октетами содержимого кодирования CER/DER. Содержимое этого кодирования состоит из п октетов и размещается в выровненном по октету поле из п октетов. Для добавления этого выровненного по октету битового поля из п октетов к списку полей с предшествующим неограниченным детерминантом длины, равным п, должны применяться процедуры 10.9.
15 Кодирование типа «битовая строка»
Примечание — Битовые строки с ограниченной длиной, меньшей или равной двум октетам, не приводят к выравниванию по октету. Большие битовые строки выравниваются по октету. Если длина фиксирована ограничениями и верхняя граница меньше 64К, то явное кодирование длины отсутствует, в противном случае включается кодирование длины, которое может иметь любую из форм, установленную ранее для кодирования длины, включая фрагментацию для больших битовых строк.
15.1 Видимые для PER ограничения могут относиться только к длине битовой строки bitstring.
15.2 Когда нет видимого для PER ограничения и применяется ГОСТ Р ИСО/МЭК 8824-1, 21.7, значение должно быть закодировано без хвостовых битов 0 (означает, что значение без равных 1 битов всегда кодируется как пустая битовая строка).
15.3 Когда есть видимое для PER ограничение и применяется ГОСТ Р ИСО/МЭК 8824-1, 21.7 (т. е. тип «битовая строка» определяется с конструкцией «NamedBitList»), значение должно быть
18