在Python 2中,二进制文件以字符串形式读取,因此字符串切片应轻松处理相邻字节的交换:
>>> original = '\xAD\xDE\xDE\xC0'
>>> ''.join([c for t in zip(original[1::2], original[::2]) for c in t])
'\xde\xad\xc0\xde'
在Python 3中,二进制文件以字节读取。仅需进行少量修改即可构建另一个字节数组:
>>> original = b'\xAD\xDE\xDE\xC0'
>>> bytes([c for t in zip(original[1::2], original[::2]) for c in t])
b'\xde\xad\xc0\xde'
您也可以在struct模块中使用<
and和>
endianess格式代码来获得相同的结果:
>>> struct.pack('<2h', *struct.unpack('>2h', original))
'\xde\xad\xc0\xde'
快乐字节交换:-)