2017-10-12 82 views
1

我想在D編寫一個基本編碼規則編解碼器,我希望能夠編碼長度不定的編碼數據,其中長度字節設置爲0x80,並且值字節的末尾用雙精度分隔null 0x00 0x00(內容結束)。但是,有時候雙精度值是被編碼的實際值的一部分。例如,如果您有OCTET STRING,則兩個相鄰字節可能爲0x00 0x00,這會被解釋爲END OF CONTENT而不是編碼值的一部分,從而導致編碼值(最佳情況)的截斷。有沒有辦法編碼雙重空值而不解釋爲END OF CONTENT?或者你是否希望只編碼沒有雙重空值的值?我還沒有在任何規範中找到這方面的任何信息。如何在八位字節字符串中以不確定長度編碼的BER字符串中轉義雙空字節?

回答

2

您從未將簡單的OCTET STRING內容置於0x80和0x00 0x00之間。相反,你會在那裏放置限定長度編碼的OCTET STRING。

換言之,不固定長度編碼,單字節的分塊「AB」的ASCII字符串(例如十六進制的0x41的0x42)應該是這樣的:

0x24 0x80  0x04 0x01 0x41  0x04 0x1 0x42  0x00 0x00 
^   ^    ^    ^
outer header inner chunk #1  inner chunk #2 outer EOO sentinel 

最終的結果是,譯碼器不具有掃描實際有效載荷搜索EOO標記,因爲有效載荷邊界清晰地由定長編碼部分定義。

+0

在這種情況下,外部標題應該表示爲構造函數,所以它應該被編碼爲0x24。它將把標識符標籤(P/C)的第6位設置爲構造。 – pepo

+0

@pepo確實!謝謝! ;-) –

相關問題