разница между типами enum и choice в ASN1

Может кто-нибудь объяснить, когда используется переменная "enum", а когда в ASN1 используется переменная "выбора"?

2 ответа

Тип ENUMERATED в ASN.1 используется, когда у вас есть список именованных элементов, из которых вы хотели бы выбрать, например

Colors ::= ENUMERATED {red, green, blue, yellow, purple}

Тип CHOICE используется, когда вы хотите выбирать между различными типами ASN.1.

PreferredContactMethod ::= CHOICE {
  mail        PrintableString,
  mobilePhone NumericString,
  email       VisibleString,
  homephone   NumericString
}

Одновременно можно выбрать только один элемент из списка.

CHOICE богаче, потому что альтернативы могут быть любого типа, который вы хотите.

PreferredContactMethod ::= CHOICE {
  mail        PrintableString,
  identity    SEQUENCE { 
     firstName PrintableString,
     lastName PrintableString
  }
}

Однако ты прав. Вы можете использовать CHOICE для определения перечисления (вы также можете использовать именованные INTEGER) ...

Colors ::= ENUMERATED {red, green, blue, yellow, purple}

Colors ::= INTEGER {red(0), green(1), blue(2), yellow(3), purple(4)}

Colors ::= CHOICE {red NULL, green NULL, blue NULL, yellow NULL, purple NULL}

Я видел 3 способа использования в спецификациях (обратите внимание, что кодировка будет другой)

Мои 2 цента: если ваш тип явно является перечислением, используйте ENUMERATED

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