def code_point(u): print('character:', u) b = u.encode('utf-8') print('hexadecimal:', ' '.join('%02x' % i for i in bytearray(b))) a = bitarray(endian='big') a.frombytes(b) pprint(a) # calculate binary code point from binary UTF-8 representation if a[0:1] == bitarray('0'): c = a[1:8] assert len(a) == 8 elif a[0:3] == bitarray('110'): c = a[3:8] + a[10:16] assert a[8:10] == bitarray('10') assert len(a) == 16 elif a[0:4] == bitarray('1110'): c = a[4:8] + a[10:16] + a[18:24] assert a[8:10] == a[16:18] == bitarray('10') assert len(a) == 24 elif a[0:5] == bitarray('11110'): c = a[5:8] + a[10:16] + a[18:24] + a[26:32] assert a[8:10] == a[16:18] == a[24:26] == bitarray('10') assert len(a) == 32 else: raise code_point = ba2int(c) print('code point:', hex(code_point)) print()
def test_file(self): tmpdir = tempfile.mkdtemp() tmpfile = os.path.join(tmpdir, 'testfile') a = bitarray(1000) try: with open(tmpfile, 'w') as fo: pprint(a, fo) with open(tmpfile, 'r') as fi: b = eval(fi.read()) self.assertEqual(a, b) finally: shutil.rmtree(tmpdir)
def test_formatting(self): a = bitarray(200) for width in range(40, 130, 10): for n in range(1, 10): f = StringIO() pprint(a, stream=f, group=n, width=width) r = f.getvalue() self.assertEqual(eval(r), a) s = r.strip("bitary(')\n") for group in s.split()[:-1]: self.assertEqual(len(group), n) for line in s.split('\n'): self.assertTrue(len(line) < width)
def get_code_string(a): f = StringIO() pprint(a, stream=f) return f.getvalue()
from __future__ import print_function from bitarray.util import urandom, pprint, ba2base, base2ba a = urandom(60) for m in range(1, 7): n = 1 << m print("----- length: %d ----- base: %d ----- " % (m, n)) pprint(a, group=m) rep = ba2base(n, a) print("representation:", rep) print() assert base2ba(n, rep) == a
def slice_i(self, i): assert 0 <= i < self.N return slice(self.k * i, self.k * (i + 1)) def __getitem__(self, i): return ba2int(self.array[self.slice_i(i)]) def __setitem__(self, i, v): self.array[self.slice_i(i)] = int2ba(v, self.k) if __name__ == '__main__': from random import randint # define array with 1000 integers, each represented by 5 bits a = SmallIntArray(1000, 5) b = [] # store values, for assertion below for i in range(1000): v = randint(0, 31) b.append(v) a[i] = v print(b[:5]) print(a.array.buffer_info()) pprint(a.array[:25], group=5) for i in range(1000): assert a[i] == b[i]