ASN.1允许您声明“子类型”,这基本上会对常规类型施加额外的约束。
因此,一种正常的类型是:
IntType ::= INTEGER但是您可以通过创建一个只允许在某个范围内的值的“子类型”来约束该类型,例如:
IntType ::= INTEGER (1..100)这将IntType声明为必须介于1到100之间的INTEGER。
我的问题是,一旦一个子类型被声明,ASN.1如何处理子类型上的进一步约束?假设我也说:
AnotherIntType ::= IntType (1..50)这有效吗?我现在已经创建了第二个SubType,它进一步限制了IntType。但是,如果这些约束相互矛盾,如:
AnotherIntType ::= IntType (1..200)解决这些矛盾是否有具体的规则?
发布于 2013-09-17 14:39:57
按照标准
47.4.2 a "ValueRange“指定范围内的值,这些值是通过指定范围的端点的值来指定的。这种表示法只能应用于整数类型、某些受限字符串类型的"PermittedAlphabet“(IA5String、NumericString、PrintableString、VisibleString、BMPString、UniversalString和UTF8String )和实类型。"ValueRange“中指定的所有值都必须位于父类型的根中。
你的第一个例子
AnotherIntType ::= IntType (1..50)是有效的。允许值是从1到50之间的整数。
第二个例子
AnotherIntType ::= IntType (1..200)无效,因为不是值范围中的所有值都在父类型中。IntType只包含1到100之间的整数。
https://stackoverflow.com/questions/18851925
复制相似问题