【发布时间】:2019-04-14 06:01:46
【问题描述】:
我有一个字符串形式的 IP 地址 R(即:"255.255.255.0"),我正在对其进行哈希处理,并获取该哈希的前 4 个字节。然后我想将该散列结果转换为二进制格式:
def H(R):
h = hashlib.sha256(R.encode('utf-8'))
return unhexlify(h.hexdigest())[0:4]
我尝试执行以下操作,但我只得到 30 位而不是 32 位(我删除了字符串的前 2 个字符,因为它是 0b 前缀):
bin(struct.unpack('!I', H(R))[0])[2:]
我怎样才能正确地做到这一点? H(R) 的结果类似于 b',\xc3Z\xfb'。我已经尝试过这里的方法,但没有一个适用于我要转换的格式。 Convert bytes to bits in python
- 我所拥有的:来自 32 位 IP 地址字符串哈希的 4 个字节,即:
b',\xc3Z\xfb' - 我想要得到的是:32 位二进制表示为字符串,即:
'10101010101010101010101010101010'
【问题讨论】:
-
你问如何正确地做“那个”。你能描述一下“那个”到底是什么吗?在英语中,这段代码的目标是什么?周围的用例是什么?你能给出示例输入和预期输出吗?
-
@JohnZwinck 编辑澄清了吗?
-
您知道 IPv4 地址是 4 个字节吗?为什么还要对它进行哈希处理然后取前 4 个字节?您可以直接使用二进制值。
-
@JohnZwinck 公平地说,这里的想法可能是为了记录目的匿名 IP 地址(获取二进制表示可能是为了测试匿名方案是否足够“随机”)。
标签: python python-3.x binary byte bit