如何将十进制转换为字节?

时间:2018-04-09 21:54:10

标签: python python-3.x types decimal byte

我需要在python3中获取非常大数的第七个根。我尝试了很多东西,但是我已经溢出了所以我认为我使用了十进制,这对我来说似乎很好,但我只能将它转换为字节,所以我可以将它转换为base64之后。

这是我的代码(c是大数字):

from decimal import *
import base64
if len(str(c)) > 25: getcontext().prec = len(str(c))
else:getcontext().prec =25
x = Decimal(str(c))
a = x ** Decimal(1) / Decimal(7)
res = a.quantize(Decimal('1.'), rounding=ROUND_DOWN)
res = int.to_bytes(res, length=int(res.bit_length()/8+1), byteorder='big', signed=False)
print(base64.b64encode(res).decode("utf-8"))

但是我收到了这个错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-48-85e144f30dc7> in <module>()
----> 1 res = int.to_bytes(res, length=int(res.bit_length()/8+1), byteorder='big', signed=False)
      2 print(base64.b64encode(res).decode("utf-8"))

AttributeError: 'decimal.Decimal' object has no attribute 'bit_length'

我知道我应该得到它。但我只是复制了我用来将int转换为字节的方式。

2 个答案:

答案 0 :(得分:2)

您可以通过采用256个基数的对数来计算数字的大小(以字节为单位,因为一个字节可以编码256个不同的数字):

length = math.ceil(math.log(res, 256))
res = int.to_bytes(res, length=length, byteorder='big', signed=False)

答案 1 :(得分:1)

首先将小数转换为字符串,然后转换为字节

x = Decimal(str(c))
a = x ** Decimal(1) / Decimal(7)
s = str(a)
b = bytes(str(a), encoding = 'utf-8')
res = base64.b64encode(b)

解码:

v = base64.b64decode(res)
v.decode('utf-8')