Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Python – I want to convert words to 8 bit binary, but certain characters are in 7 bits

I have a code (python) that converts any character on a keyboard to binary, but if the character has 2 zeros in the beginning of the binary code, it deletes 1 of the zeros, so it can’t be converted back.

<body>
  <p>Click to open <a href="localhost:8000" target="_blank" rel="noopener noreferrer">local host</a>.</p>
  <div>Type here to convert characters to binary;</div>
  <input type="text" id="test-input"/>
  <button id="submit-button" type="submit" pys-onClick="my_function">OK</button>
  <p>Text: <div id="test-output"></div></p>
  <p>Binary: <div id="test-output2"></div></p>

    <py-script>
        from js import console

        def my_function(*args, **kwargs):

            #print('args:', args)
            #print('kwargs:', kwargs)

            console.log(f'args: {args}')
            console.log(f'kwargs: {kwargs}')
    
            text = Element('test-input').element.value

            #print('text:', text)
            console.log(f'text: {text}')
            textTwo = text.replace(" ", "_").replace("@", "_").replace("#", "_").replace("$", "_").replace("%", "_").replace("^", "_").replace("&", "_").replace("*", "_").replace("(", "_").replace(")", "_").replace("-", "_").replace("+", "_").replace("=", "_").replace("{", "_").replace("}", "_").replace("[", "_").replace("]", "_").replace("|", "_").replace(":", "_").replace(";", "_").replace('"', "_").replace("<", "_").replace("/", "_").replace("!", "_").replace("'", "_").replace("?", "_").replace(",", "_").replace(".", "_").replace(">", "_")

            output = ' '.join(map(bin,bytearray(textTwo,'ascii')))
            new_output = output.replace("b", "")
            Element('test-output').element.innerText = textTwo
            Element('test-output2').element.innerText = new_output
    </py-script>
  <br>
  <div>Type here to convert binary to characters;</div>
  <input type="text" id="test-inputs"/>
  <button id="submit-button22" type="submit" pys-onClick="my_functions">OK</button>
  <p>Binary: <div id="test-outputs"></div></p>
  <p>Text: <div id="test-outputs2"></div></p>
    <py-script>
        from js import console
        import re

        def my_functions(*args, **kwargs):

            #print('args:', args)
            #print('kwargs:', kwargs)

            console.log(f'args: {args}')
            console.log(f'kwargs: {kwargs}')
    
            text = Element('test-inputs').element.value

            #print('text:', text)
            console.log(f'text: {text}')
            newName = re.sub('[\\\\qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM23456789]', '', text)
            new_text = newName.replace(" ", "")
            bins = new_text
            binc = [bins[i:i + 8] for i in range(0, len(bins), 8)]
            nums = [int(chunk, 2) for chunk in binc]
            output = ''.join(chr(num) for num in nums)
            Element('test-outputs').element.innerText = text
            Element('test-outputs2').element.innerText = output
    </py-script>
</body>

Everything converts nicely, but numbers don’t. I fixed it so all marks like !@#$%^&*() and spaces are put as _.

Edit: Here is the part that needs fixing;

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

from js import console

def my_function(*args, **kwargs):

    #print('args:', args)
    #print('kwargs:', kwargs)

    console.log(f'args: {args}')
    console.log(f'kwargs: {kwargs}')
    
    text = Element('test-input').element.value

    #print('text:', text)
    console.log(f'text: {text}')
    textTwo = text.replace(" ", "_").replace("@", "_").replace("#", "_").replace("$", "_").replace("%", "_").replace("^", "_").replace("&", "_").replace("*", "_").replace("(", "_").replace(")", "_").replace("-", "_").replace("+", "_").replace("=", "_").replace("{", "_").replace("}", "_").replace("[", "_").replace("]", "_").replace("|", "_").replace(":", "_").replace(";", "_").replace('"', "_").replace("<", "_").replace("/", "_").replace("!", "_").replace("'", "_").replace("?", "_").replace(",", "_").replace(".", "_").replace(">", "_")

    output = ' '.join(map(bin,bytearray(textTwo,'ascii')))
    new_output = output.replace("b", "")
    Element('test-output').element.innerText = textTwo
    Element('test-output2').element.innerText = new_output

>Solution :

output = ' '.join(map(bin,bytearray(textTwo,'ascii'))) doesn’t make sure the binary is 8 digits long, use:

output = ' '.join([format(n,'08b') for n in textTwo.encode('ascii')])

(and you won’t need new_output line).

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading