使用Python的struct模块翻转字节

1 投票
4 回答
4989 浏览
提问于 2025-04-15 18:49

我想把这个字符串从大端格式转换成小端格式:

\x00\x40

希望能变成这样:

\x40\x00

我觉得应该用 struct.pack 这个函数,但我找不到合适的方法让它正常工作。希望能得到一点帮助!

谢谢

4 个回答

0

这行代码的意思是把一个叫做“big_endian”的东西的两个部分调换顺序,然后把调换后的结果赋值给“little_endian”。具体来说,原本的“big_endian”是由两个部分组成的,代码把第二部分放在前面,第一部分放在后面,形成了一个新的顺序。

5

data[::-1] 这个写法可以用在任何数量的字节上。

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'

这个方法首先把字符串按小端格式解包成一个无符号短整型,然后再按大端格式重新打包。你当然可以反过来做。转换大端和小端的时候,转换的方向其实不重要——转换函数是双向的。

撰写回答