def encode(data): if not data: return l = len(data) if l % 2 != 0: return None ret = bytearray() for i in range(0, l, 2): usTmp = data[i] << 8 usTmp += data[i + 1] ucByte = ((usTmp >> 12) & 0xff) if i >= l - 2: ucByte |= ((1 << 5) & 0xff) if i < 2: ucByte |= ((1 << 6) & 0xff) a = ((2 << 6) & 0xff) a += ((usTmp >> 6) & 0x3f) b = ((3 << 6) & 0xff) b += (usTmp & 0x3f) ret.append(ucByte) ret.append(a) ret.append(b) return ret def decode(data): if not data: return l = len(data) if l % 3 != 0: return None ret = bytearray() for i in range(0, l, 3): val = data[i] usTmp = (val & 0x0f) usTmp <<= 6 val = data[i + 1] a = (val & 0x3f) usTmp += a usTmp <<= 6 val = data[i + 2] b = (val & 0x3f) usTmp += b a = (usTmp >> 8) & 0xff b = (usTmp & 0xff) ret.append(a) ret.append(b) return ret