我想将0x12345678
打包到\x34\x12\x78\x56
我写了这个
>>> a = struct.unpack('cccc', struct.pack('I', 0x12345678))
>>> struct.pack('cccc', [a[i] for i in (1,0,3,2)])
但它非常难看。有没有更简单的方法呢?
答案 0 :(得分:1)
修改:正确的方法:使用short并反转endian类型
newString = filter(lambda char: char.isdigit(), oldString)
旧答案
你可以改变用法......
import struct
a = struct.unpack('hh', struct.pack('I', 0x12345678))
struct.pack('>hh', *a)
但是它制造了很多变量
或者,在数组中交换将使您更容易传递结果:
import struct
a1, a0, a3, a2 = struct.unpack('cccc', struct.pack('I', 0x12345678))
struct.pack('cccc', a0, a1, a2, a3)
注意:他们可能是更好的交换方式:)
答案 1 :(得分:1)
一种方法是将它分成短片然后重新组合,虽然它几乎同样丑陋:
def pack(x):
return struct.pack('<hh', x >> 16, x & 0xffff)
>>> pack(0x12345678).encode('hex')
'34127856'
据我所知,Python中没有对混合字节序的开箱即用支持。