CHOICE 的 ENUMERATED 替代值表示法

value notation for ENUMERATED alternative of a CHOICE

规格如下

G-011 DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN 
Payment-method ::= CHOICE {
  check        NumericString(SIZE (15)),
  credit-card  Credit-card,
  cash         NULL
}

Credit-card ::= SEQUENCE {
  type         Card-type,
  number       NumericString(SIZE (20)),
  expiry-date  NumericString(SIZE (6))-- MMYYYY -- 
}

Card-type ::= ENUMERATED {
  cb(0), visa(1), eurocard(2), diners(3), american-express(4)
}

END

我认为使用 cb 付款的价值表示法是:

value Payment-method ::= credit-card : cb

但是,http://asn1-playground.oss.com/ 无法解析此值

我的值有什么问题?

编辑: 我的错,我没有足够仔细地阅读规范(感谢@Ilya)

value Payment-method ::= credit-card : { 
    type cb, 
    number "01234567890123456789", 
    expiry-date "042018"}

您是否缺少值表示法中的 credit-card.type 字段?因为 cb 属于 type 字段属于 credit-card 一个。

更笼统地说,ENUMERATED 类型只是一堆命名整数,而 CHOICE 是可用于值的类型的有限集合。

value Payment-method ::= credit-card : 
{
    type cb,
    number "00000000000000000000",
    expiry-date "012099"
}

我通过将模块切换到 IMPLICIT 标记并写下我希望它解释的十六进制来得到它:

3080
  0A0100
  12143030303030303030303030303030303030303030
  1206303132303939
  0000