2017-10-12 80 views
-1

我想在asn1c中使用CONTAINING(http://lionet.info/asn1c/blog/)。我不知道如何給CONTAINING結構賦值。如何在asn1c中使用封裝的結構? (使用CONTAINING)

在我的例子中,我想給版本和tsapolicy的Octasd SEQUENCE值。我以爲我可以像任何其他asn1類型那樣做。

其他類型,例如INTGER,你可以使用函數來給出值。 我可以asn_long2INTEGER功能給予的contentType值:

EncapsulatedContentInfo_t *encapcontinfo; 
asn_long2INTEGER(&encapcontinfo->contentType, 32); 

在例如代碼:EncapsulatedContentInfo-> eContent.octasd.version 但我不 「見」 的背後octasd。

有沒有辦法達到封裝結構?我ASN1的

部分:

EncapsulatedContentInfo ::= SEQUENCE { 
    contentType INTEGER, 
    eContent [0] IMPLICIT SEQUENCE { 
     octasd Octasd 
    } 
} 

Octasd ::= OCTET STRING (CONTAINING SEQUENCE { 
    version INTEGER, 
    tsapolicy OBJECT IDENTIFIER 
}) 

任何意見讚賞。

回答

0

Lev Walkin的編譯器似乎不支持CONTAINING子句的代碼生成(至少不是嵌入的子句)。不過,我並不是很熟悉它。

你可能會考慮做什麼,如果你真的需要使用CONTAINING關鍵字是分離的類型,例如:

Octasd ::= OCTET STRING -- (CONTAINING OctasdSeq) 

OctasdSeq ::= SEQEUENCE { 
    version INTEGER, 
    tsapolicy OBJECT IDENTIFIER 
} 

這可能你對待Octasd作爲一個簡單的字節串,並通過它字節(無論如何,該值字節)到達解碼器OctasdSeq。我猜如果你使用PER代替BER/CER/DER,這可能會有點困難,因爲有潛在的對齊問題。