在python中打印十六进制字符串

时间:2016-12-20 11:15:32

标签: python

我在x86上,小端。 所以我从udp数据包中获取了这些数据。

data, addr = sock.recvfrom(1024)

print(data) 

提供类似'\xfe\x15'

的内容

我理解为内存中的小端布局。

该值应表示为 0x15fe

在C i中,

printf("%x", hexvalue); 

它直接给了我0x15fe。

如何让Python正确打印十六进制值?

非常感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用struct将bytestring转换为int,如下所示:

>>> data = b'\xfe\x15'
>>> num, = struct.unpack('<h', data)

这里<h表示一个小端2字节有符号整数。如果您的数据未签名,请使用<H。查看documentation了解更多信息。

然后您可以使用print(hex(num))或类似内容进行打印:

>>> print(hex(num))
0x15fe

作为旁注,请记住sock.recvfrom(1024)可能返回多于或少于2个字节。解析时请考虑到这一点。