2016-12-20 49 views
0

我在x86上是little-endian。 所以我从一个udp数据包中获得了这些数据。在Python中打印十六进制字符串

data, addr = sock.recvfrom(1024) 

print(data) 

给出类似'\xfe\x15'

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

值应表示为 0x15fe

在C我做的,

printf("%x", hexvalue); 

,这让我0x15fe通俗易懂。

如何让Python正确输出十六进制值?

非常感谢。

+0

你有没有试过repr(数据)? –

回答

2

您可以将字节字符串转换为使用struct,像这样一个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个字节。解析时请将其考虑在内。