如何计算位串右补0至完整字节所需的补0数量?
位串补0至完整字节的正确实现方法
你的代码存在逻辑漏洞:当位串长度大于8且不是8的整数倍时,计算出的补0长度会出错。比如位串长度为9时,len(bitstr) % 8得到1,此时补1个0会得到10位,依然无法被8整除,不符合需求。
正确的补0长度计算逻辑是:如果当前长度已经是8的倍数,补0个;否则补8 - (len(bitstr) % 8)个0。对应的代码实现如下:
padding_len = (8 - len(bitstr) % 8) % 8 bitstr += '0' * padding_len
也可以用更直观的写法:
remainder = len(bitstr) % 8 padding_len = 8 - remainder if remainder != 0 else 0 bitstr += '0' * padding_len
验证几个典型场景:
- 位串
'01110'(长度5):余数为5,补3个0,总长度变为8,符合要求 - 位串长度为9:余数为1,补7个0,总长度变为16,符合要求
- 位串长度为8:余数为0,不补0,总长度保持8,符合要求
内容的提问来源于stack exchange,提问作者haruhi
相关产品推荐
相关产品推荐

