ГОСТ Р ИСО/МЭК 8825-2-2003
честве октетов имеет ширину поля, кратную восьми битам, и удовлетворяет условию, что головные восемь битов поля не равны нулю или единице одновременно.
Примечание — Это является необходимым и достаточным условием для создания единственного кодирования.
10.5 Кодирование ограниченного целого числа
Примечание — На настоящий подраздел ссылаются другие разделы, а сам он ссылается на предыдущие подразделы при создании неотрицательного двоичного целого или двоично-дополнительного до 2 целого кодирования. Для варианта UNALIGNED значение всегда кодируется в минимальном количестве битов, необходимом для представления диапазона (определенного в 10.5.3). Остальная часть настоящего примечания относится к варианту ALIGNED. Когда диапазон меньше или равен 255, значение кодируется в битовом поле минимального для диапазона размера. Когда диапазон равен 256, значение кодируется в единственном октете выровненного по октету битового поля. Когда диапазон от 257 до 64К, значение кодируется в два октета выровненного по октету битового поля. Когда диапазон больше 64К, он игнорируется, и значение кодируется в выровненное по октету битовое поле, которое содержит минимальное для значения количество октетов. В последнем случае дальнейшие процедуры (см. 10.9) кодируют и поле длины (обычно один октет) для указания длины кодирования. В других случаях длина кодирования не зависит от кодируемого значения и не кодируется явно.
10.5.1 Настоящий подраздел специфицирует отображение из ограниченных целых чисел либо в битовое поле, либо в выровненное по октету битовое поле, которое используется в последующих разделах настоящего стандарта.
10.5.2 Процедуры данного подраздела вызываются, если только ограниченное целое число, которое должно быть закодировано, доступно, а значения нижней границы, lb, и верхней границы, ub, были определены из нотации типа (после применения видимых для PER ограничений).
Примечание — Нижняя граница не может быть определена, если MIN является бесконечным числом, а верхняя граница не может быть определена, если MAX является бесконечным числом. Например ни верхняя, ни нижняя границы не могут быть определены для INTEGER (MIN..MAX).
10.5.3 Определим диапазон «range» как целое значение (ub — lb + 1); пусть значение, которое должно быть закодировано, есть п.
10.5.4 Если «range» имеет значение 1, то результат кодирования должен быть пустым битовым полем (без битов).
10.5.5 Существует пять других случаев (приводящих к разным кодированиям), в одном из которых применяется вариант UNALIGNED, а в четырех других — вариант ALIGNED.
10.5.6 В случае варианта UNALIGNED значение (п — lb) должно быть закодировано как неотрицательное двоичное целое в битовом поле, как определено в 10.3, с минимальным числом битов, необходимым для представления диапазона.
Примечание — Если «range» удовлетворяет неравенству 2т < «range» < 2т+\ то число битов равно т + 1.
10.5.7 В случае варианта ALIGNED кодирование зависит от того, что:
а) «range» меньше или равен 255 (случай битового поля);
б) «range» равен 256 (случай одного октета);
в) «range» больше 256, но меньше или равен 64К (случай двух октетов);
г) «range» больше 64К (случай неопределенной длины).
10.5.7.1 (Случай битового поля). Если диапазон «range» меньше или равен 255, то применение настоящего раздела требует сгенерировать битовое поле с числом битов, указанным ниже в таблице и содержащим значение (п — lb) в виде неотрицательного двоичного целого кодирования в битовом поле, как определено в 10.3.
Диапазон «range» 2
3, 4
5—8
9—16
17—32
33—64
65—128
129—255
Размер битового поля (в битах) 1 2
3
4
5
6
7
8
12