转换为二进制截断位

时间:2017-12-24 12:31:12

标签: python

当尝试创建随机的256位数时,输入被截断(有时为252位,其他为254)。 MacOS Sierra 10.12.6

python --version
Python 2.7.13 :: Anaconda 4.4.0 (x86_64)

示例:

>>> private_key = binascii.hexlify(os.urandom(32))
>>> len(bin(int(private_key, 16))[2:])
256
>>> private_key = binascii.hexlify(os.urandom(32))
>>> len(bin(int(private_key, 16))[2:])
252
>>> private_key = binascii.hexlify(os.urandom(32))
>>> len(bin(int(private_key, 16))[2:])
256

1 个答案:

答案 0 :(得分:2)

正如@vaulath在评论中所说,bin截断到最短的表示,没有前导零。因此,如果一个数字在开头有2个零,那么它只有254位。你也可以很容易地看到这一点:

>>> bin(int("001001", 2))[2:]
'1001'
>>> len("001001")
6
>>> len(bin(int("001001", 2))[2:])
4

如果你想要完整的256位,你可以这样:

>>> len(format(0,"0256b"))
256