使用Python的struct模块翻转字节

时间:2010-02-03 04:03:21

标签: python struct endianness flip

我想将这个字符串从大到小翻转:

\x00\x40

让它像这样:

\x40\x00

我想使用的正确函数是struct.pack,但我找不到让它正常工作的方法。 非常感谢小帮助!

由于

4 个答案:

答案 0 :(得分:6)

您没有显示整个代码,因此最简单的解决方案是:

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之间进行转换时,转换的方式无关紧要 - 转换功能是双向的。

答案 1 :(得分:5)

data[::-1]适用于任意数量的字节。

答案 2 :(得分:0)

little_endian = big_endian[1] + big_endian[0]

答案 3 :(得分:0)

我可以想象这里真正想要做的是将输入数据从大端(或网络)字节顺序转换为主机字节顺序(无论可能是什么)。

>>> from struct import unpack
>>> result = unpack('>H', '\x00\x40')

这将是一种比仅交换更便携的方法,当代码被移动到根本不需要交换的大端机器时,这种方法肯定会失败。