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

Python如何读取二进制文件每第8个bit位并将内容写入新文件

提取二进制文件每第8个bit位的Python实现

实现思路

  • 二进制文件的存储最小单位为字节,1字节等于8个bit,因此每第8个bit刚好对应每个字节的固定位置位,直接按字节遍历文件即可,不需要将整个文件读入内存,适合处理大文件
  • 对每个读取到的字节,按位运算提取目标位,把收集到的8个目标位拼接成1个新字节,写入到新文件中

核心代码示例

# 配置参数:如果你的第8位是每个字节从左数(最高位)的第8位,就用掩码128(二进制10000000)
# 如果是从右数(最低位)的第1位为计数起点,取第8位同样用128,若需调整目标位可修改掩码值
TARGET_BIT_MASK = 128
INPUT_FILE_PATH = "你的源二进制文件路径"
OUTPUT_FILE_PATH = "输出的新文件路径"

if __name__ == "__main__":
    bit_buffer = 0
    bit_count = 0
    with open(INPUT_FILE_PATH, "rb") as in_f, open(OUTPUT_FILE_PATH, "wb") as out_f:
        # 每次读1字节,逻辑清晰,大文件可调整为每次读1024字节减少IO次数
        while byte := in_f.read(1):
            # 读取当前字节的目标bit位,得到0或者1
            current_bit = (byte[0] & TARGET_BIT_MASK) != 0
            # 把bit写入缓冲区
            bit_buffer = (bit_buffer << 1) | current_bit
            bit_count += 1
            # 凑够8个bit就写成1个字节写入文件
            if bit_count == 8:
                out_f.write(bytes([bit_buffer]))
                bit_buffer = 0
                bit_count = 0
        # 最后如果剩下不足8个bit,可自行决定是否补0凑够8位写入,这里默认忽略

注意事项

  • 要先确认你对每第8个bit的计数规则:如果是把所有bit按从左到右的顺序数,第8、16、24...位的话,上面的掩码用128即可;如果计数规则不同,可调整掩码值或者字节读取顺序
  • 如果需要保留最后不足8位的剩余bit,可以在循环结束后给bit_buffer左移补0到8位,再写入输出文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 14:45:03