ASN.1/BER/DER编码子集入门指南(二)(二)

2014-11-23 23:14:06 · 作者: · 浏览: 4
选组件可能有默认值。

2.3 隐式和显式标签类型(Implicitly and explicitly tagged types)


在一个application中tagging对于区分类型十分有用,tagging通常也用于在一个结构类型中区分组件类型。例如,SET或SEQUENCE类型的可选组件一般都给予不同的context-specific标签以避免混淆。

有两种方法可以标记一个类型:隐式(implicitly)和显式(explicitly)。
隐式标签类型是在其它类型基础上通过改变其下层类型的标签生成的。隐式标签使用ASN.1关键词[class number] IMPLICIT(见第5.1节)表示。

显式标签是在其它类型基础上通过在其下层类型的标签之外添加一个外层标签生成的。从效果上看,显式标签类型是包含一个组件的结构类型,该组件即下层类型。显式标签由ASN.1关键词[class number] EXPLICIT(见第5.2节)表示。

只有关键词[class number]与使用显式标签相同,除非该“模块”的ASN.1类型默认定义为隐式标签。(“模块”属于高级特性,不在本文档描述范围内)

从编码的角度看,隐式标签类型可视为与下层类型相同,除非标签不同。显式标签类型可视为有一个组件的结构类型,该组件即为下层类型。隐式标签可以使编码较短,但是如果下层类型是不确定的,显式标签必须避免含糊不清(例如下层类型是CHOICE或ANY)。

ASN.1中的其他类型包括CHOICE和ANY类型。CHOICE类型表示一个联合体,它具有一个或多个备选项(alternative);ANY类型表示任意类型的任意值,其中任意类型可能在使用对象识别符或整数值注册中定义。

(未完待续)