2

ASN.1 允许您声明“子类型”,这基本上对常规类型施加了额外的约束。

因此,常规类型将是:

IntType ::= INTEGER

但是您可以通过创建仅允许特定范围内的值的“子类型”来限制类型,例如:

IntType ::= INTEGER (1..100)

这声明IntTypeINTEGER必须在 1 到 100 之间。

我的问题是,一旦声明了子类型,ASN.1 如何处理对子类型的进一步约束?假设我还说:

AnotherIntType ::= IntType (1..50)

那有效吗?我现在创建了第二个 SubType,它进一步约束IntType. 但是,如果约束相互矛盾怎么办,例如:

AnotherIntType ::= IntType (1..200)

是否有解决这些矛盾的具体规则?

4

1 回答 1

1

根据标准

47.4.2 “ValueRange”指定一个值范围内的值,这些值通过指定范围端点的值来指定。此表示法只能应用于整数类型、某些受限字符串类型(仅 IA5String、NumericString、PrintableString、VisibleString、BMPString、UniversalString 和 UTF8String)的“PermittedAlphabet”和实数类型。“ValueRange”中指定的所有值都必须位于父类型的根中。

你的第一个例子

AnotherIntType ::= IntType (1..50)

已验证。允许的值是从 1 到 50 的整数。

第二个例子

AnotherIntType ::= IntType (1..200)

无效,因为并非值范围内的所有值都在父类型中。IntType仅包含从 1 到 100 的整数。

于 2013-09-17T14:39:57.093 回答