2016-12-15 93 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。