chiark / gitweb /
bug fix and encode func
authorAdrien Beraud <adrienberaud@gmail.com>
Fri, 7 Sep 2012 14:29:44 +0000 (16:29 +0200)
committerAdrien Beraud <adrienberaud@gmail.com>
Fri, 7 Sep 2012 14:29:44 +0000 (16:29 +0200)
base91.py

index e970a09b2f14d44c4f76adb802eea6c728aa3455..60bfa04762d698e41821f32bac9928774b5226c2 100644 (file)
--- a/base91.py
+++ b/base91.py
@@ -11,14 +11,15 @@ base91_alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', '
 decode_table = dict((v,k) for k,v in enumerate(base91_alphabet))
 
 def decode(encoded_str):
+    ''' Decode Base91 string to a bytearray '''
     v = -1
     b = 0
     n = 0
     out = bytearray()
     for strletter in encoded_str:
-        if not strletter in dectable:
+        if not strletter in decode_table:
             continue
-        c = dectable[strletter]
+        c = decode_table[strletter]
         if(v < 0):
             v = c
         else:
@@ -36,3 +37,33 @@ def decode(encoded_str):
         out += struct.pack('B', (b | v << n) & 255 )
     return out
     
+def encode(bindata):
+    ''' Encode a bytearray to a Base91 string '''
+    l = len(bindata)
+    b = 0
+    n = 0
+    out = ''
+    for byte in bindata:
+        b |= struct.unpack('B', byte)[0] << n
+        n += 8
+        if n>13:
+            v = b & 8191
+            if v > 88:
+                b >>= 13
+                n -= 13
+            else:
+                v = b & 16383
+                b >>= 14
+                n -= 14
+            out += base91_alphabet[v % 91] + base91_alphabet[v / 91]
+    if n:
+        out += base91_alphabet[b % 91]
+        if n>7 or b>90:
+            out += base91_alphabet[b / 91]
+    return out
+
+
+
+
+
+