python - 为什么我将四个字节转换为二进制只有 30 个二进制数字?

标签 python python-3.x binary byte bit

我有一个 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/

相关文章:

python - 使用外部 dowload_url 将包注册到 PyPi

Python:如何使用 webbrowser 模块打开默认浏览器?

python - 如何使用pymssql将数据帧写入mssql?

python - Heroku Node.js + Python

python - 如果新文件不存在则写入新文件,如果存在则追加到文件

字符到二进制函数不能按预期工作

python - 为什么我不能在我的双重迭代中覆盖我的旧生成器?

Python - Tkinter 文本大小未调整大小

应用于 LVALUE 或 RVALUE 宽度的 C 二元运算符

c - 十进制到 IEEE 754 使用 C 的单精度 IEEE 754 代码