0

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

\x00\x40

像这样:

\x40\x00

我猜想使用的正确函数是 struct.pack,但我找不到让它正常工作的方法。一个小小的帮助将不胜感激!

谢谢

4

4 回答 4

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 之间转换时,您转换哪种方式并不重要 - 转换功能是双向的。

于 2010-02-03T04:07:00.740 回答
5

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

于 2010-02-03T05:01:46.030 回答
0

little_endian = big_endian[1] + big_endian[0]

于 2010-02-03T04:09:22.323 回答
0

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

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

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

于 2011-03-13T11:40:01.200 回答