Natsukl

base1048576 binary converter

Dec 10th, 2023 (edited)
791
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.75 KB | Source Code | 0 0
  1. # Scar32
  2. # DEVIXLER
  3.  
  4. # this is my own take on a base1M converter.
  5. # this format can convert strings of bits starting at
  6. # 0 or 1 and can convert bits at any length even one
  7. # bit or even zero bits!
  8.  
  9. import math
  10. import bitstring
  11. def bits2character(bits):
  12.     character = 1114111
  13.     for i in range(20):
  14.         character -= int(bits[i])*2**i
  15.     return chr(character)
  16. characters = '01'
  17. def character2bits(character):
  18.     n = 1114111-ord(character)
  19.     out = ''
  20.     for l in range(20):
  21.         char = int(n)%2
  22.         out += characters[char]
  23.         n = (n-char)/2
  24.     return out
  25. def bits2string(bits):
  26.     out = ''
  27.     bits = bits+'1'+'0'*(20-len(bits)%20-1) # my format puts a 1 at the end of the bits followed by zeros
  28.     for p in range(int((len(bits)+1)/20)):
  29.         chunk = ''
  30.         for s in range(20):
  31.             chunk += bits[p*20+s]
  32.         out += bits2character(chunk)
  33.         print(str(p)+"/"+str(int((len(bits)+1)/20)))
  34.     return out
  35. def string2bits(string):
  36.     data = ''
  37.     for i in string:
  38.         data += character2bits(i)
  39.     while data[-1] == '0':
  40.         data = data[:-1]
  41.     data = data[:-1]
  42.     return data
  43. def stringcompactor(string): # puts the characters in a square grid
  44.     out = ''
  45.     cpr = int(math.sqrt(len(string)*2))
  46.     cpc = int(len(string) / cpr)
  47.     for c in range(cpc):
  48.         for r in range(cpr):
  49.             out += string[c*cpr+r]
  50.         out += '\n'
  51.     for i in range(len(string)-cpr*cpc):
  52.         out += string[cpr*cpc+i]
  53.     return out
  54. def read_bits(file_path):
  55.     bits = bitstring.BitArray(filename=file_path)
  56.     return bits.bin
  57. #pyperclip.copy(bits2string(read_bits('/yourfile.zip')))
  58. # demo
  59. print(bits2string(input('bits to string: ')))
  60. print(string2bits(input('string to bits: ')))
Advertisement
Add Comment
Please, Sign In to add comment