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

Python3.7中含0x00的集合长度计算错误问题咨询

问题排查与解决方案

你的问题根源非常明确——你错误地使用了集合(set)来存储字节数据,而集合会自动剔除重复元素,这直接导致了长度计算错误。

具体原因拆解

你定义的barray是一个集合:

barray = { 0x22, 0x00, 0x43, 0x61, 0x62, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x78, 0x00, 0x01, 0x00, 0x41, 0x54, 0xff, 0xff, 0xff, 0xff }

集合的核心特性是元素唯一,不允许重复。你的原始数据里存在多个重复值:

  • 0x00出现了3次 → 集合中仅保留1个
  • 0x61(对应字符'a')出现了2次 → 集合中仅保留1个
  • 0x62(对应字符'b')出现了2次 → 集合中仅保留1个
  • 0xff出现了4次 → 集合中仅保留1个

原本你预期的20个元素,经过集合去重后只剩下15个,所以len(barray)返回15,进而(15-4)/8 = 11/8 = 1.375,和你看到的结果完全吻合。

修复方案

  1. 将集合改为列表(list):列表允许重复元素,能完整保留你所有的原始字节值:
    barray = [0x22, 0x00, 0x43, 0x61, 0x62, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x78, 0x00, 0x01, 0x00, 0x41, 0x54, 0xff, 0xff, 0xff, 0xff]
    
  2. 使用整数除法计算行数:为了得到整数结果,建议用//替代/,避免出现浮点数:
    rows = (length - 4) // 8
    

修改后运行代码,len(barray)会返回20,rows会返回2,完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:39:08