Преобразовать возврат юникода Python easysnmp в шестнадцатеричную строку?

Значения возвращаются из командной строки следующим образом:

      #~ snmpwalk -v 2c -c someComm localhost .1.3.6.1.2.1.123.1.4.1.12 | grep -i "87 54 2A 63"
SNMPv2-SMI::mib-2.123.1.4.1.12.1.8 = Hex-STRING: 87 54 2A 63
SNMPv2-SMI::mib-2.123.1.4.1.12.1.23 = Hex-STRING: 87 54 2A 63
SNMPv2-SMI::mib-2.123.1.4.1.12.1.32 = Hex-STRING: 87 54 2A 63
SNMPv2-SMI::mib-2.123.1.4.1.12.8.3 = Hex-STRING: 87 54 2A 63

Но когда я использую easysnmp, они возвращаются в виде юникода, и я не могу найти нужные мне строки, можете ли вы помочь мне преобразовать их обратно?

      >>>c = snmp_walk('.1.3.6.1.2.1.123.1.4.1.12', hostname='localhost', community='someComm', version=2)
>>> pprint(c)
[<SNMPVariable value='T*n (contains binary)' (oid='mib-2.123.1.4.1.12.1.1', oid_index='', snmp_type='OCTETSTR')>,
 <SNMPVariable value='B& (contains binary)' (oid='mib-2.123.1.4.1.12.1.2', oid_index='', snmp_type='OCTETSTR')>,
...
>>>c= c[1].value
>>> type(c)
<type 'unicode'>
>>> c
u'B\xa2\xb6&'
>>> print(c)
B¢¶&

Спасибо, что посмотрели!

1 ответ

Следуя указаниям из Как преобразовать строку int в шестнадцатеричную строку?, я смог преобразовать значения из юникода обратно в шестнадцатеричные пары. Вот фрагмент:

      >>> myStr = ""
>>> for b in c:
...   myStr += ("%0.2X" % ord(b)) + " "
...
>>> myStr.strip()
'A8 D7 66 BC'
Другие вопросы по тегам