pyasn1 prettyPrint() - 以十六进制显示整数

pyasn1 prettyPrint() - display integers in hex

我有很多univ.Integer(),但是想把它们全部打印成十六进制,这很容易与底物的解码有关。

我该怎么做?

一个这样的例子是

namedtype.NamedType('vendor-id', univ.Integer())
namedtype.NamedType('device-id', univ.Integer())
namedtype.NamedType('subven-id', univ.Integer())
namedtype.NamedType('subsys-id', univ.Integer())

任何漂亮打印的选项,它将所有整数转换为十六进制?或子调用 univ.Integer 以获得一些显示技巧?

prettyPrint 没有这样的选项。不过我可以给你两个想法。

如果您需要漂亮地打印特定的整数,而不是包含嵌入整数的整个复合对象树,您可以只使用 hex():

>>> Integer(123).prettyPrint()
'123'
>>> hex(int(Integer(123)))
'0x7b'

否则你可以像这样修改 pyasn1 Integer.prettyOut() 方法:

>>> class MyInteger(Integer):
...     def prettyOut(self, value):
...         return hex(value)
... 
>>> MyInteger(123).prettyPrint()
'0x7b'
>>>