bitfield.py

来自「BitTorrentABC-Linux-V.2.4.3源码」· Python 代码 · 共 53 行

PY
53
字号
# Written by Bram Cohen# see LICENSE.txt for license informationtrue = 1false = 0def booleans_to_bitfield(booleans):    r = []    for i in xrange(0, len(booleans), 8):        v = 0        p = 0x80        for j in booleans[i:i+8]:            if j:                v |= p            p >>= 1        r.append(chr(v))    return ''.join(r)def bitfield_to_booleans(bitfield, l):    extra = len(bitfield) * 8 - l    if extra < 0 or extra >= 8:        return None    r = []    for c in bitfield:        v = ord(c)        for i in xrange(8):            if v & 0x80 != 0:                r.append(true)            else:                r.append(false)            v <<= 1    if extra > 0:        if r[-extra:] != [0] * extra:            return None        del r[-extra:]    return rdef test_basic():    x = [1, 1, 1, 0, 0, 0, 1, 1, 1]    y = [1, 1, 1, 0, 0, 0, 1, 1]    for a in [x, y, []]:        assert bitfield_to_booleans(booleans_to_bitfield(a), len(a)) == adef test_too_long():    assert bitfield_to_booleans('ab', 8) == None    def test_too_short():    assert bitfield_to_booleans('a', 9) == None    def test_nonzero_in_excess():    assert bitfield_to_booleans(chr(0xFF), 7) == None 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?