案例: - 我需要使用pyasn1解码BER编码数据,但标签的顺序可能会有所不同。因此,在解码数据时会出现错误。 Tag的顺序是否真的很重要,即使它是可选的Tag?
注意: - (案例1)一个CDR中的8个不同标签按顺序排列:AF 30 81 82 83 84 85 86
(case2)Another 8 Tags is in order : AF 30 81 83 84 85 86 82
但我需要用单解码结构解码两个顺序,这可能吗?
这里给我的结构供参考....
class ChangeOfCharCondition(univ.Sequence):
componentType = namedtype.NamedTypes(
namedtype.OptionalNamedType('Requested', univ.OctetString().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)))
namedtype.OptionalNamedType('Negotiated', univ.OctetString().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
namedtype.OptionalNamedType('Uplink', univ.Integer().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
namedtype.OptionalNamedType('Downlink', univ.Integer().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))),
namedtype.NamedType('changeCondition', univ.Integer().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5))),
namedtype.NamedType('changeTime', univ.OctetString().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6)))
)
class TrafficVolumes(univ.SequenceOf):
tagSet = baseTagSet = tag.initTagSet(tag.Tag(tag.tagClassContext,
tag.tagFormatSimple, 15))
componentType = ChangeOfCharCondition()
class Cdr(univ.Set):
tagSet = baseTagSet = tag.initTagSet(tag.Tag(tag.tagClassContext,
tag.tagFormatSimple, 20))
componentType = namedtype.NamedTypes(
namedtype.OptionalNamedType('TrafficVolumes', TrafficVolumes().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 15))))
示例数据(案例1) - bytearray('\ xaf200 \ x81 \ x0c \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ X82 \ x0cx01 \ x12Q \ x1fs \ x96HHv \ XFA \ XFF \ XFF \ X83 \ X01 \ X00 \ X84 \ X01 \ X00 \ X85 \ X01 \ X02 \ 86 \吨\ X12 \ X12 \ X10 \ X12 \ x00P + \ X050' )它工作正常
示例数据(案例2) - bytearray('\ xaf200 \ x81 \ x0c \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ X83 \ X01 \ X00 \ X84 \ X01 \ X00 \ X85 \ X01 \ X02 \ 86 \吨\ X12 \ X12 \ X10 \ X12 \ x00P + \ X050 \ X82 \ x0cx01 \ x12Q \ x1fs \ x96HHv \ XFA \ XFF \ XFF” )在这种情况下它会引发错误,如, PyAsn1Error:TagSet(Tag(tagClass = 128,tagFormat = 0,tagId = 2))不在asn1Spec中:无'