我有一些pyasn1
八进制字符串对象,定义如下:
LInfo.componentType = namedtype.NamedTypes(namedtype.NamedType('XXX', univ.OctetString().subtype(subtypeSpec=constraint.ValueSizeConstraint(2, 2)).subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))
当我使用asn.1
库对pyasn.1
进行解码时,它会将值转换为它的ascii表示形式,例如,我得到了“ &/
”,但是我需要在十六进制表示。例如,在这种情况下,我需要&/
而不是262F
。
显然,我可以提取&/
或在那里找到的任何内容,然后手动进行转换,例如:
value.asOctects().encode("HEX")
但是我不能以这种格式将其写回字段中。
在打印对象之前,是否有一种简便的方法来操作对象,使得我可以在最终的漂亮打印中看到262F
而无需修改asn.1
定义(我无法更改)是给我的?)
答案 0 :(得分:0)
您可以做的是将OctetString
类子类化,重写其prettyPrint
方法,然后在解码器中注册新类。您的prettyPrint
返回的内容最终会打印出来。
from pyasn1.codec.ber import decoder
from pyasn1.type import univ
class OctetString(univ.OctetString):
def prettyPrint(self):
return self._value
class OctetStringDecoder(decoder.OctetStringDecoder):
protoComponent = OctetString('')
decoder.tagMap[OctetString.tagSet] = OctetStringDecoder()
decoder.typeMap[OctetString.typeId] = OctetStringDecoder()