我在x86上,小端。 所以我从udp数据包中获取了这些数据。
data, addr = sock.recvfrom(1024)
print(data)
提供类似'\xfe\x15'
我理解为内存中的小端布局。
该值应表示为 0x15fe
在C i中,
printf("%x", hexvalue);
它直接给了我0x15fe。
如何让Python正确打印十六进制值?
非常感谢。
答案 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个字节。解析时请考虑到这一点。