2010-02-03 58 views
0

我想从大翻转到小尾数字符串:翻转字节

\x00\x40

有这样的:

\x40\x00

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

感谢

回答

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' 

哪个先拆包字符串作为小尾端无符号短符号,然后将其打包为大尾符号无符号短符号。当然,你可以用另一种方式。在BE和LE之间转换时,转换方式无关紧要 - 转换功能是双向的。

0

little_endian = big_endian[1] + big_endian[0]

5

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

+1

我认为这是一个更好的方式来做到这一点。 – 2010-02-03 05:11:11

0

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

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

这将不仅仅是一个交换更便携的方式,这势必当代码移动到大端机器,不需要在所有交换失败。