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
规格如下
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