0

我在我的套接字上收到一个 4 字节的值,我想将其打印为十六进制值。我在尝试:

 print "%08x" % (nonce)

但是,我收到一条错误消息,指出字符串无法转换为十六进制。有人知道如何快速解决这个问题吗?

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

您很可能有一个包含字节的字符串。但是,要将它们打印为数字,您需要......一个数字。

您可以像这样轻松创建所需的十六进制字符串:

''.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 回答