0

16 進値として出力したい 4 バイトの値をソケットで受け取りました。やっています:

 print "%08x" % (nonce)

ただし、文字列を 16 進数に変換できないというエラー メッセージが表示されます。これをすばやく解決する方法を知っている人はいますか?

4

5 に答える 5

3

このstructモジュールを使用して、ネットワークから受信したオクテットを実際の数値にアンパックします。%08xフォーマットは数値で機能します:

import struct
n, = struct.unpack('>I', nonce)
print "%08x" % n
于 2012-11-23T12:39:58.270 に答える
0

データを文字列に変換できる場合は、次のstr.encode()方法を使用できます。

>>> s = "XYZ"
>>> s.encode('hex')
'58595a'
于 2012-11-23T13:13:02.687 に答える
0

ほとんどの場合、バイトを含む文字列があります。ただし、それらを数字として印刷するには、よく必要です..数字。

次のように、探している 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'
于 2012-11-23T12:40:25.673 に答える
0

別のオプションは次のとおりです。

from binascii import hexlify
>>> hexlify('a1n4')
'61316e34'
于 2012-11-23T12:42:18.113 に答える
0
num = "9999"
print hex(int(num))
#0x270f
于 2012-11-23T12:44:02.990 に答える