0

有人可以解释一下何时使用“枚举”变量与何时在 ASN1 中使用“选择”变量?

4

2 回答 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 回答