我想把这个字符串从大端翻转到小端:
\x00\x40
像这样:
\x40\x00
我猜想使用的正确函数是 struct.pack,但我找不到让它正常工作的方法。一个小小的帮助将不胜感激!
谢谢
我想把这个字符串从大端翻转到小端:
\x00\x40
像这样:
\x40\x00
我猜想使用的正确函数是 struct.pack,但我找不到让它正常工作的方法。一个小小的帮助将不胜感激!
谢谢
您没有显示整个代码,因此最简单的解决方案是:
data = data[1] + data[0]
如果您坚持使用struct
:
>>> from struct import pack, unpack
>>> unpack('<H', '\x12\x13')
(4882,)
>>> pack('>H', *unpack('<H', '\x12\x13'))
'\x13\x12'
它首先将字符串解压缩为 little-endian unsigned short,然后将其打包为 big-endian unsigned short。当然,你也可以反过来。在 BE 和 LE 之间转换时,您转换哪种方式并不重要 - 转换功能是双向的。
data[::-1]
适用于任意数量的字节。
little_endian = big_endian[1] + big_endian[0]
我可以想象,这里真正想要做的是将输入数据从大端(或网络)字节序转换为您的主机字节序(无论可能是什么)。
>>> from struct import unpack
>>> result = unpack('>H', '\x00\x40')
这将是一种比交换更便携的方法,当代码移动到根本不需要交换的大端机器时,交换肯定会失败。