将Python整数转换为大端字节字符串

85 投票
9 回答
168119 浏览
提问于 2025-04-15 11:30

我有一个非负的整数,我想把它高效地转换成一个大端格式的字符串,这个字符串要包含相同的数据。例如,整数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'

撰写回答