Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用pyasn1解码ASN1编码数据(嵌套结构化数据)?_Python_Python 2.7_Asn.1 - Fatal编程技术网

Python 如何使用pyasn1解码ASN1编码数据(嵌套结构化数据)?

Python 如何使用pyasn1解码ASN1编码数据(嵌套结构化数据)?,python,python-2.7,asn.1,Python,Python 2.7,Asn.1,我的数据应该可以通过以下方式获取 示例结构:- listOfVolumes: -> SequenceOf ChangeOfCharCondition -> Sequence dataUplink: 9612742 -> Integer dataDownlink: 216449 -> Integer changeCondition: qoSChan

我的数据应该可以通过以下方式获取

示例结构:-

    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
如何解码以这种特定格式编码的数据(bytearray)

我可以解码它,如果它只是SEQUENCEOF结构中的一个序列, 但是,我很难多次重复这些数据,能不能请任何一个人 能给我一个更好的方法来解决这个问题吗?任何建议对我都是有价值的。。 提前撒克逊人..
示例代码:

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')

如果您的编码包含一个有效的项目序列,并且您相应地定义了pyasn1数据结构,那么pyasn1解码器应该能够自行循环所有实例序列


您可以发布数据结构的pyasn1规范吗?

如果您拥有所有这些数据结构的正式ASN.1语法,请在此处发布

您的一般方法看起来是正确的,但是您使用ASN.1标记的方式是可疑的

从您对语法的最初描述来看,您应该能够通过调用pyasn1来解码bytearray:

decoder.decode(mybytearray, asn1Spec=ListOfVolumes())
e、 g.将ListOfVolumes()类实例作为顶级原型对象传递给解码器。如果失败,可能是因为标签不正确

要深入挖掘,启用pyasn1调试可能会有所帮助:

from pyasn1 import debug
debug.setLogger(debug.Debug('all')

并查看从bytearray读取的标记以及您的规范中与之匹配的对象。

我已使用示例代码更新了我的查询,我正试图通过示例代码对其进行解码。你可以参考一下,让我知道我哪里出错了?提前谢谢。。