有人可以解释一下何时使用“枚举”变量与何时在 ASN1 中使用“选择”变量?
问问题
293 次
2 回答
1
ASN.1 中的 ENUMERATED 类型用于当您有一个要从中选择的命名项目列表时使用,例如
Colors ::= ENUMERATED {red, green, blue, yellow, purple}
当您想在不同的 ASN.1 类型之间进行选择时,使用 CHOICE 类型。
PreferredContactMethod ::= CHOICE {
mail PrintableString,
mobilePhone NumericString,
email VisibleString,
homephone NumericString
}
一次只能选择选项中的一项。
于 2020-07-15T21:19:28.997 回答
0
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
于 2020-07-16T06:37:10.810 回答