разница между типами 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