ГОСТ 1»ИСО/МЭК 8825-2-2003
12 Кодирование целочисленного типа
Примечания
1 (Вариант ALIGNED) Диапазоны, которые допускают кодирование всех значений в одном октете или
менее, попадают в битовое иоле минимальною размера без счетчика длины. Диапазоны, которые допускают
кодирование всех значений вдвухоктетах, попадают в выровненное по октету битовое поле безсчетчикадлины. В
остальных случаях значение кодируется в минимальном количестве октетов (используя неотрицательное
двоичное целое или двоично-дополнительное до 2 целое кодирование) и добавляется детерминант длины. В
том случае, когда целочисленное значение может быть закодировано менее чем в 127 октетов (как смешение от
некоторой нижней границы, которая может быть определена) и нет конечных верхней и нижней грании.
имеется одинооктетный детерминант длины: иначе длина кодируется в наименьшем необходимом количестве
битов. Прочие случаи нс имеют практического значения, но специфицированы для полноты.
2 (вариант UNALIGNED) Ограниченные целые кодируются в наименьшем необходимом для представ
ления диапазона количестве битов независимо от их размера. Неограниченные целые числа кодируются, как
в примечании I.
12.1 Если в спецификации ограничения целочисленного типа присутствует маркер расшире
ния, то к списку поле!) в битовом поле длины должен быть добавлен один бит. Бит должен быть
равен 1, если значение, которое должно колироваться, не находится в пределах диапазона
корня расширения, и нулю — в противном случае. В первом случае значение должно быть
добавлено к списку палей как неограниченное целое значение, как определено в 12.2.4—12.2.6,
и процедура завершается. Во втором случае значение должно быть закодировано так, как
если бы маркер расширения отсутствовал.
12.2 Если маркер расширения не представлен в спецификации ограничения целочисленного
типа, тогда применяется следующая процедура.
12.2.1 Если видимые для PER ограничения допускают для целого единственное значение, то
не должно быть никакого дополнения к списку полей, и эта процедура завершается.
12.2.2 Если видимые для РЕК ограничения допускают ограниченное целое число в качестве
целочисленного значения, то оно должно быть преобразовано в поле согласно процедурам 10.5 (коди
рование ограниченного целого числа), а затем должны быть применены процедуры 12.2.5—12.2.6.
12.2.3 Если видимые для PER ограничения допускают полуограниченное целое число в каче
стве целочисленного значения, то оно должно быть преобразовано в ноле согласно процедурам 10.7
(кодирование полуограниченного целого числа), а затем должны быть применены процеду ры 12.2.6.
12.2.4 Если видимые для PER ограничения допускают целое не только как ограниченное или
полуограниченное целое число, то оно должно быть преобразовано в поле согласно процедурам 10.8
(кодирование неограниченного целого числа), а затем должны быть применены процедуры 12.2.6.
12.2.5 Если процедуры, использованные для кодирования целочисленного значения в поле, не
привели к случаю неопределенной длины (см. 10.5.7.4 и 10.8.2), то это поле должно быть добавлено
в конец списка полей, и эта процедура завершается.
12.2.6 В противном случае (т. е. в случае неопределенной длины) должны быть применены
процедуры 10.9 для добавления поля в список полей после одного из следующих элементов:
а) ограниченного детерминанта длины 1еп (как определено 10.5.7.4), если видимое для PER
ограничение удерживает тип в пределах верхней и нижней грании н (если тип расширяемый)
значение находится в диапазоне корня расширения. Нижняя граница lb, используемая в детерми
нанте длины, должна быть равна 1, а верхняя граница ub должна быть счетчиком количества октетов,
требуемых дтя хранения диапазона целочисленного значения.
П ри мечам нс — Значение *foo INTEGER (256.. 1234567) :: = 256» было бы закодировано как
СЮххххххОООООООО. где каждый V представляет нулевой заполняющий бит, который может присутствовать или
отсутствовать в зависимости от того, в каком месте в октете находится длина (например. 00 хххххх
00000000,
если длина начинается на границе октета, и 00 00000000. если она начинается во втором от конца бите октета);
б) неограниченного детерминанта длины 1еп (как определено в 10.7 и 10.8), если видимые для
PER ограничения не удерживают тип в пределах верхней и нижней грании
или
если тип расширяе
мый и значение не находится в диапазоне корня расширения.
13 Кодирование перечислимого типа
П ри ме ча н н с —Перечислимый тип без маркера расширения кодируется как ограниченное целое,
ограничение подтипа которого не содержит маркер расширения. Эго означает, что на практике перечислимый
тип будет почти всегда кодироваться как битовое поле с минимальным количеством битов, необходимых дли
17