constraints - ASN.1:SIZE 约束能否用于约束 SEQUENCE(不是 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
and SET OF
,只是无序的。
我会这样解决您的问题:创建CHOICE
所有可选字段(不带OPTIONAL
修饰符)并将此 CHOICE 添加到您的主要类型:
MyChoice ::= CHOICE {
someNumber INTEGER,
someString PrintableString
}
MyType ::= SEQUENCE {
theID OBJECT IDENTIFIER,
myChoice < MyChoice
}
在这种情况下,theID
字段是必需的,并且恰好MyChoice
需要其中一个元素。
推荐阅读
- mysql - 添加降序条件后sql查询不起作用
- apache-spark - Spark 数据集分区与 cassandra 创建一大块镶木地板文件以及许多小文件
- asp.net - 如何将图像从 Ionic 3 应用程序上传到内置 ASP.NET CORE 的网络服务器?
- java - KeyListener 在带有 Netbeans 的 Java 中不起作用
- python - 当我使用 numpy.array() 处理 'list' 时如何处理?
- ios - 未调用 UITextView 委托方法
- javascript - ES6 减少返回 1 个数组项而不是 2 个
- jquery - 使用 Select2.js 搜索文本和 id
- html - 遵循 BEM 约定编写 css flex 代码的最佳方法是什么?
- c - Linux-内存不足