16 進値として出力したい 4 バイトの値をソケットで受け取りました。やっています:
print "%08x" % (nonce)
ただし、文字列を 16 進数に変換できないというエラー メッセージが表示されます。これをすばやく解決する方法を知っている人はいますか?
16 進値として出力したい 4 バイトの値をソケットで受け取りました。やっています:
print "%08x" % (nonce)
ただし、文字列を 16 進数に変換できないというエラー メッセージが表示されます。これをすばやく解決する方法を知っている人はいますか?
このstruct
モジュールを使用して、ネットワークから受信したオクテットを実際の数値にアンパックします。%08x
フォーマットは数値で機能します:
import struct
n, = struct.unpack('>I', nonce)
print "%08x" % n
データを文字列に変換できる場合は、次のstr.encode()
方法を使用できます。
>>> s = "XYZ"
>>> s.encode('hex')
'58595a'
ほとんどの場合、バイトを含む文字列があります。ただし、それらを数字として印刷するには、よく必要です..数字。
次のように、探している 16 進文字列を簡単に作成できます。
''.join('%02x' % ord(x) for x in nonce)
デモ:
>>> nonce = os.urandom(4)
>>> nonce
'X\x19e\x07'
>>> ''.join('%02x' % ord(x) for x in nonce)
'58196507'
別のオプションは次のとおりです。
from binascii import hexlify
>>> hexlify('a1n4')
'61316e34'
num = "9999"
print hex(int(num))
#0x270f