如何将打印为ascii的pyasn1八进制字符串预打印为十六进制

2024-06-23 20:09:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些pyasn1octect string对象定义如下:

LInfo.componentType = namedtype.NamedTypes(namedtype.NamedType('XXX', univ.OctetString().subtype(subtypeSpec=constraint.ValueSizeConstraint(2, 2)).subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)))

当我使用pyasn.1库对asn.1进行解码时,它将值转换为其ascii表示形式,例如我得到“&/”,但我需要以十六进制表示显示数值。例如,在本例中,我需要&/,而不是&/。 显然,我可以提取&/或我在其中找到的任何东西并手动转换,比如:

^{pr2}$

但是我不能用这种格式把它写回字段。在

有没有一种简单的方法可以在打印之前操作对象,这样我就可以在最后的漂亮打印中看到262F,而不需要修改{}定义(我不能更改它,因为它是给我的)?在


Tags: 对象string定义tagxxxunivsubtypeoctetstring
1条回答
网友
1楼 · 发布于 2024-06-23 20:09:55

您可以做的是将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()

这是the original code。在

相关问题 更多 >

    热门问题