我想在asn1c(http://lionet.info/asn1c/blog/)中使用CONTAINING。我不知道如何为包含结构赋予价值。
在我的例子中,我想在Octasd SEQUENCE中为版本和tsapolicy提供值。我想我可以像任何其他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 :(得分:0)
Lev Walkin的编译器似乎不支持CONTAINING
子句的代码生成(至少不支持嵌入式代码)。不过,我对它不是很熟悉。
如果您真的需要使用CONTAINING
关键字,您可能会考虑做的是分隔类型,例如:
Octasd ::= OCTET STRING -- (CONTAINING OctasdSeq)
OctasdSeq ::= SEQEUENCE {
version INTEGER,
tsapolicy OBJECT IDENTIFIER
}
这可能会将Octasd
视为一个简单的八位字符串,并将其字节(值字节,无论如何)传递给OctasdSeq
的解码器。我猜这可能会因为潜在的对齐问题而使用PER而不是BER / CER / DER会有点困难。