【发布时间】:2022-01-23 12:23:55
【问题描述】:
我处于一种特殊情况,我想将一个整数转换为可能的最小长度的字节对象。我目前使用以下方法转换为字节:
number = 9847
bytes = number.to_bytes(4, 'little')
但是,我想将使用的字节数(4)缩小到可能的最小大小。我怎样才能做到这一点?
【问题讨论】:
标签: python python-3.x
我处于一种特殊情况,我想将一个整数转换为可能的最小长度的字节对象。我目前使用以下方法转换为字节:
number = 9847
bytes = number.to_bytes(4, 'little')
但是,我想将使用的字节数(4)缩小到可能的最小大小。我怎样才能做到这一点?
【问题讨论】:
标签: python python-3.x
我自己想出来的!我现在使用以下函数为我转换为字节:
import math
def int_to_bytes(self, integer_in: int) -> bytes:
"""Convert an integer to bytes"""
# Calculates the least amount of bytes the integer can be fit into
length = math.ceil(math.log(integer_in)/math.log(256))
return integer_in.to_bytes(length, 'little')
这是有效的,因为对于指数 a = b^e 等价于 e = log(a)/log(b)
在这种情况下,我们的问题是 integer_in = 256^e,我们想要求解 e。这可以通过将其改写为 e = log(integer_in)/log(256) 来解决。最后,我们使用 math.ceil() 将答案四舍五入为整数。
【讨论】: