2016-12-15 137 views
0

我有一个关于显性和隐性标签问题,在下面的例子中Ecoding和解码隐式标签的

X ::= [APPLICATION 5] IMPLICIT INTEGER 

X,因为隐含的标签将与[APPLICATION 5]替换INTEGER现有的标签,所以在编码值5的BER将在十六进制45 01 05中。解码器如何知道45 01 05的类型?

回答

0

解码器从八位字节流中恢复原始类型的唯一方法是知道它即将到来。 AFAIK,你应该给你的解码器一个提示,在给定的情况下,什么类型的期望,最重要的是,什么基地ASN.1类型隐式标记类型映射。

考虑检出this book

0

我怀疑你的真正的问题是,“一个BER解码器怎么能知道当使用隐式标签和这些标签更换,否则信号需要被解码的ASN.1类型的标签做什么?”

是否解码器可以处理IMPLICIT标签依赖于解码器是否由ASN.1规范,它提供了必要的上下文通知。对SEQUENCE,SET和CHOICE的组件有强制要求,以确保解码器可以读取标签并知道哪个组件需要解码,因此,该类型是什么。这需要了解ASN.1规范。

相比之下,不被ASN.1规范通知的通用BER解码器将有隐含的标签有问题,因为它缺乏必要的情况下对其进行解释。

0

通常,BER解码器是由ASN.1编译器根据给定的规范(模式)生成的。然后,在解码期间,除输入编码数据外,用户还将指定他们想要解码的类型。使用类型信息,解码器将知道要解码什么。

0

首先,我cheked一本书“异类系统之间的通信ASN.1”那给我伊利亚Etingof,下面显示更多detaills:

“的隐性标记过程如下:以下所有

:以下代码,通过一个类型的参考明确地提及或间接地到达被忽略直到UNIVERSAL类标签的下一次出现(含)(除非显式标记之前遇到)所以,对于类型T。 T :: = [1] IMPLICIT T1

T1 :: = [5] IMPLICIT T2 *

T2 :: = [APPLICATION 0] IMPLICIT INTEGER

仅标记[1]应该进行编码。解释隐式标签的概念 的另一种方式是说,一个标签标注隐改写 它后面(递归)的标签;因此,对于上面的例子中,标记[1]覆盖标签[5],这反过来会覆盖标签[APPLICATION 0]其中 fnally覆盖INTEGER类型的默认标签[UNIVERSAL 2]。

A型标记在隐式模式可以被解码仅当接收 应用`知道'抽象句法,即解码器已经从 同一ASN.1模块生成作为编码器为(并且这样的 是的大部分时间)的情况下。”

所以我想这(ASN1规范)的negociation应该在数据transfert的开头呈现layaer被perfermed。