将Python整数转换为大端字节字符串
我有一个非负的整数,我想把它高效地转换成一个大端格式的字符串,这个字符串要包含相同的数据。例如,整数1245427(也就是0x1300F3)应该变成一个长度为3的字符串,这个字符串里有三个字符,它们的字节值分别是0x13、0x00和0xf3。
我的整数大约有35位数字(十进制)。
我该怎么做呢?
9 个回答
15
这个方法很快,并且适用于小的和(任意大小的)大整数:
def Dump(n):
s = '%x' % n
if len(s) & 1:
s = '0' + s
return s.decode('hex')
print repr(Dump(1245427)) #: '\x13\x00\xf3'
67
你可以使用struct模块:
import struct
print(struct.pack('>I', your_int))
'>I'
是一个格式字符串。>
表示大端字节序,而I
表示无符号整数。想了解更多格式字符,可以查看文档。
74
在Python 3.2及以上版本中,你可以使用 int.to_bytes 这个功能:
如果你不想指定大小
>>> n = 1245427
>>> n.to_bytes((n.bit_length() + 7) // 8, 'big') or b'\0'
b'\x13\x00\xf3'
如果你不介意指定大小
>>> (1245427).to_bytes(3, byteorder='big')
b'\x13\x00\xf3'