Основное правило кодирования ASN целого числа

В настоящее время я изучаю Абстрактную синтаксическую нотацию 1 и читаю Рекомендацию МСЭ-Т X.690.

На странице 15 в пункте 8.3.2 написано:

Если октеты содержимого кодировки целочисленных значений состоят из более чем одного октета, то биты первого октета и бит 8 второго октета:

  1. не все будут едины; а также
  2. не все должны быть равны нулю.

ПРИМЕЧАНИЕ. - Эти правила гарантируют, что целочисленное значение всегда кодируется в наименьшем возможном количестве октетов.

Я понимаю, что для того, чтобы целое число всегда было закодировано в наименьшем возможном количестве октетов, первый октет не должен быть нулевым.

Но как насчет тех? Если я хочу кодировать значение 65408 (1111 1111 1000 0000), используя Основные правила кодирования, как мне это сделать?

2 ответа

Решение

Я понимаю, что для того, чтобы целое число всегда было закодировано в наименьшем возможном количестве октетов, первый октет не должен быть нулевым.

Не обязательно. Если старший бит целого числа установлен в 1, то значение считается отрицательным (в случае целых чисел со знаком). Чтобы обозначить целое положительное число, добавляется ноль (0) ведущего октета. Это в общем.

Вот хорошая статья о Integer-кодировании: http://msdn.microsoft.com/en-us/library/windows/desktop/bb540806(v=vs.85).aspx

Кодировка 2 дополнения. Вам нужен ведущий октет 0000 0000. Обратите внимание, что это не будет нарушать цитируемое вами правило, так как бит 8 второго октета будет равен 1.

Другие вопросы по тегам