【发布时间】:2014-02-02 21:28:40
【问题描述】:
我正在尝试将 sha256 哈希的前 10 位作为整数获取,目前,我将其转换为字符串,然后将其修剪为 10 位并转换回 int。
这看起来很复杂,有没有更好的方法?
我从这里的另一个帖子中借来的代码
def inttobin(i):
if i == 0:
return "0"
s = ''
while i:
if i & 1 == 1:
s = "1" + s
else:
s = "0" + s
i >>= 1
return s
然后我用来转换为 int 的代码是:
bin = inttobin(struct.unpack('H', hash[:2])[0])
idx = int(bin[-10:], 2)
有什么建议吗?
【问题讨论】:
-
请注意,有一个
bin内置函数可以将整数转换为字符串:即bin(3) -> "0b11"。0b是始终存在的前缀,因此您应该使用bin(x)[2:]来获得与inttobin相同的结果。然后表达式简化为int(bin(struct.unpack('H', hash[:2])[0])[-10:], 2)。 -
想必你在这里说的是散列的十六进制摘要?
-
另外:在计算
sha256时,您可以计算digest(),它返回字节。然后在 python3 中你可以做(digest[-2] << 8 + digest[-1]) & 1023。在 python2 中,您必须添加对ord的调用。
标签: python binary bit-manipulation