2017-10-12 42 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,这可能会有点困难,因为有潜在的对齐问题。