ASN.1:SIZE约束可以用来约束SEQUENCE(不是SEQUENCE OF)
ASN.1: Can the SIZE constraint be used to constrain SEQUENCE (not SEQUENCE OF)
以下类型定义是否有效的 ASN.1 语法?
MyType ::= SEQUENCE SIZE(2) {
theID OBJECT IDENTIFIER,
someNumber INTEGER OPTIONAL,
someString PrintableString OPTIONAL
}
我想正式约束序列,以便对于每个实例化,两个可选属性中的一个必须存在。
PS:由于 SEQUENCE
和 SEQUENCE OF
的编码方式完全相同,我希望这种语法有效。
此语法无效。 SEQUENCE
就像一个带有字段的结构类型,其中每个字段可以是不同的类型。 SEQUENCE OF
就像一个数组,其中所有嵌套类型都是相同的类型。因此,在 SEQUENCE OF
中,您可以将约束设置为数组大小。同样的规则适用于 SET
和 SET OF
,只是无序。
我会这样解决你的问题:为所有可选字段创建一个 CHOICE
(没有 OPTIONAL
修饰符)并将此 CHOICE 添加到你的主要类型中:
MyChoice ::= CHOICE {
someNumber INTEGER,
someString PrintableString
}
MyType ::= SEQUENCE {
theID OBJECT IDENTIFIER,
myChoice < MyChoice
}
在这种情况下,theID
字段是必填字段,并且恰好需要 MyChoice
个元素之一。
以下类型定义是否有效的 ASN.1 语法?
MyType ::= SEQUENCE SIZE(2) {
theID OBJECT IDENTIFIER,
someNumber INTEGER OPTIONAL,
someString PrintableString OPTIONAL
}
我想正式约束序列,以便对于每个实例化,两个可选属性中的一个必须存在。
PS:由于 SEQUENCE
和 SEQUENCE OF
的编码方式完全相同,我希望这种语法有效。
此语法无效。 SEQUENCE
就像一个带有字段的结构类型,其中每个字段可以是不同的类型。 SEQUENCE OF
就像一个数组,其中所有嵌套类型都是相同的类型。因此,在 SEQUENCE OF
中,您可以将约束设置为数组大小。同样的规则适用于 SET
和 SET OF
,只是无序。
我会这样解决你的问题:为所有可选字段创建一个 CHOICE
(没有 OPTIONAL
修饰符)并将此 CHOICE 添加到你的主要类型中:
MyChoice ::= CHOICE {
someNumber INTEGER,
someString PrintableString
}
MyType ::= SEQUENCE {
theID OBJECT IDENTIFIER,
myChoice < MyChoice
}
在这种情况下,theID
字段是必填字段,并且恰好需要 MyChoice
个元素之一。