我有一个 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'
最佳答案
我猜这会起作用
import hashlib
import binascii
def H(R):
h = hashlib.sha256(R.encode('utf-8'))
return binascii.unhexlify(h.hexdigest())[0:4]
def binstr(x: bytes) -> str:
s = ""
for char in x:
ch = bin(char)[2:] # 0b101 -> 101
s += "0" * (8-len(ch)) + ch # 101 -> 00000101
return s
print(binstr(H("127.0.0.1"))) # 00010010110010100001011110110100
print(binstr(H("255.255.255.255"))) # 11110100010101000110001010111111
关于python - 为什么我将四个字节转换为二进制只有 30 个二进制数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53246529/