Skip to content

chunks() 定长分块生成器 ​

✂️ 把序列切成定长块的生成器,myhexdump 逐行渲染的基础。

📎 源码在线查看:myhexdump.py#L159-L178(chunks)

签名 ​

python
def chunks(seq, size)
# 生成器:yield 长度 size 的块(最后一块可能不足)

示例 ​

python
>>> list(chunks([1,2,3,4,5,6,7], 3))
[[1, 2, 3], [4, 5, 6], [7]]

实现 ​

python
def chunks(seq, size):
    d, m = divmod(len(seq), size)
    for i in range(d):
        yield seq[i * size:(i + 1) * size]
    if m:
        yield seq[d * size:]

算法 ​

  • divmod(len, size) 拆成「完整块数 d + 尾巴长度 m」
  • 先 yield 出 d 个完整块
  • 若有余数 m,再 yield 一个不足 size 的尾块

为什么用生成器 ​

python
# 一次性返回 list 的写法(占内存)
def chunks_list(seq, size):
    return [seq[i:i+size] for i in range(0, len(seq), size)]

# 生成器写法(惰性)
def chunks(seq, size):
    ...yield...

处理大流量(上百 MB 的包)时不一次性占满内存——r0capture 抓大流量时这个惰性很关键。

在 hexdump 里的用途 ​

hexdump 每行渲染 16 字节,就是用 chunks(binary, 16) 把明文按 16 字节分块,逐块格式化成一行。

相关文档 ​

基于 VitePress 构建 · 教学用途