ASN.1允许您声明“子类型”,这基本上对常规类型施加了额外的约束。
所以,常规类型是:
IntType ::= INTEGER
但是你可以通过创建一个只允许某个范围内的值的“子类型”来限制类型,例如:
IntType ::= INTEGER (1..100)
这声明IntType
为INTEGER
,必须介于1到100之间。
我的问题是,一旦声明了Sub-Type,ASN.1如何处理子类型的进一步约束?假设我也说:
AnotherIntType ::= IntType (1..50)
这有效吗?我现在已经创建了第二个SubType,它进一步限制了IntType
。但如果约束相互矛盾,如下所示:
AnotherIntType ::= IntType (1..200)
是否有解决这些矛盾的具体规则?
答案 0 :(得分:1)
根据标准
47.4.2“ValueRange”指定一系列值中的值,这些值通过指定值来指定 该范围的终点。这种表示法只能应用于整数类型,某些受限制的“PermittedAlphabet” 字符串类型(IA5String,NumericString,PrintableString,VisibleString,BMPString, 仅限UniversalString和UTF8String)和真实类型。 “ValueRange”中指定的所有值都必须是 在父类型的根目录中。
你的第一个例子
AnotherIntType ::= IntType (1..50)
有效。允许的值是从1到50的整数。
第二个例子
AnotherIntType ::= IntType (1..200)
无效,因为值范围内的所有值都不在父类型中。 IntType
仅包含1到100之间的整数。