我的数据应该能像下面的方式来获取..如何使用pyasn1解码ASN1编码的数据(嵌套结构化数据)?
示例结构: -
listOfVolumes: -> SequenceOf
ChangeOfCharCondition -> Sequence
dataUplink: 9612742 -> Integer
dataDownlink: 216449 -> Integer
changeCondition: qoSChange (0) -> Enumerated
Time: 1206202320082b0530 -> OctetString
ChangeOfCharCondition -> Sequence
qosNegotiated: 0223921f9396979774f9ffff -> OctetString
dataUplink: 57664480 -> Integer
dataDownlink: 1460443 -> Integer
changeCondition: recordClosure (2) -> Enumerated
Time: 1206210017072b0530 -> OctetString
我怎么解码,在这个特定的格式编码(字节阵列)数据?
我可以对其进行解码,如果它仅仅是SEQUENCEOF结构, 内的单个序列,但它是非常难我遍历数据超过一次,任何一个可以请 建议我一个更好的方法理清这个问题?任何的建议是有价值的,我.. Thaks提前..
示例代码:
class ChangeCondition(univ.Enumerated):
namedValues = namedval.NamedValues(
('qoS', 0),
('Time', 1),
('Closure', 2),
('ContinueOngoing', 3),
('RetryandTerminateOngoing', 4),
('TerminateOngoing', 5),
('cGI', 6),
('rAI', 7),
('dT', 8),
('dT-Removal', 9))
subtypeSpec = univ.Enumerated.subtypeSpec + \
constraint.SingleValueConstraint(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
class ChangeOfCharCondition(univ.Sequence):
componentType = namedtype.NamedTypes(
namedtype.OptionalNamedType('Negotiated', univ.OctetString().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),
namedtype.OptionalNamedType('dataUplink', univ.Integer().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))),
namedtype.OptionalNamedType('dataDownlink', univ.Integer().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))),
namedtype.NamedType('changeCondition', ChangeCondition().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 5))),
namedtype.OptionalNamedType('Time', univ.OctetString().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 6)))
)
class ListOfVolumes(univ.SequenceOf):
tagSet = baseTagSet = tag.initTagSet(tag.Tag(tag.tagClassContext,tag.tagFormatSimple, 12),)
componentType = ChangeOfCharCondition()
class MyCdr(univ.Set):
tagSet = baseTagSet = tag.initTagSet(tag.Tag(tag.tagClassContext,tag.tagFormatSimple, 21))
componentType = namedtype.NamedTypes(
namedtype.OptionalNamedType('listOfVolumes', ListOfVolumes()))
我的数据是一样的东西如下,
bytearray(b'\xb5\x81\x2a\xac(0&\xa2\x0e\x81\x0c\x01#Q\x1f\x93\x96HHt\xf9\xff\xff\x83\x02\x06x\x84\x02\x13m\x85\x01\x02\x86\t6\x05"#\x12E+\x050')
我已更新我的查询与试图解码它的示例代码。你可以请参考它,让我知道哪里出错了?提前致谢.. – Nishad