You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无循环将未知长度Bytes转换为带前导零的Bits?

问题

已知单个字节转带前导零的二进制字符串可以这么实现:

byte = 58
format(byte, '08b')
>>> '00111010'

处理两个字节时则使用:

format(bytes, '016b')

但如果不知道字节数量,没法在format里指定固定的长度参数,我目前的实现方式是:

with open('file','rb')as a:
    b = a.read()
    c = int.from_bytes(b)
    d = format(c,'b')
d = (8 - len(b)%8)*'0' + d

想找到更简便的实现方法,要求不使用任何循环。

解答

这里有两种更简洁的实现方案,均满足无循环的要求:

方法一:动态生成格式化长度

直接通过字节长度计算所需的总二进制位数,用动态格式化字符串一步完成转换:

with open('file', 'rb') as a:
    b = a.read()
    d = format(int.from_bytes(b), f'0{len(b)*8}b')

len(b)*8直接得到二进制字符串需要的总长度,将其嵌入格式化符号0{len(b)*8}b后,format会自动补全前导零,无需额外的补零操作。

方法二:借助binascii模块转换

如果不想通过整数中转,也可以用binascii模块先转十六进制,再补全二进制前导零:

import binascii

with open('file', 'rb') as a:
    b = a.read()
    hex_str = binascii.hexlify(b).decode()
    d = bin(int(hex_str, 16))[2:].zfill(len(b)*8)

zfill(len(b)*8)会自动在二进制字符串左侧补零,直到长度符合字节数×8的要求,全程没有循环操作。

内容的提问来源于stack exchange,提问作者user19773037

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:20:59