Python: How do add variable length leading zeros to a binary string?

796 views Asked by At

I am looking to add leading zeros to my_string = '01001010' to ensure that a minimum of 'length' bits string, where length >= len(my_string)

1

There are 1 answers

0
Pranav Kumar On BEST ANSWER

I have defined a function which converts to bits an integer of unknown base (hexadecimal, decimal, octal, binary etc.). The bits are padded with zeros to a minimum of a user defined length and overflows to extra bits if necessary without padding zeros.

def convert_bits(obj, **kwargs):


    if 'base' in kwargs:
        base = int(kwargs.get('base'))
    else:
        base = 10
    if 'location' in kwargs:
        location = int(kwargs.get('location'))
    else:
        location = -1
    if 'subroutine' in kwargs:
        subroutine = str(kwargs.get('subroutine'))
    else:
        subroutine = ''
    try:

        if 'length' in kwargs:
            length = int(kwargs.get('length'))
            bitstream = "{0:0{1:}b}".format(int(str(obj), base), length)           

            if len(bitstream) != length:
                raise OverflowException(
                     bitstream=bitstream, length=length, location=location, 
subroutine=subroutine)

        else:
            bitstream = "{0:0b}".format(int(str(obj), base))
    except Exception as e:
        print(f"Exception in convert_bits method: {e}\n")
    return bitstream

class OverflowException(Exception):
def __init__(self, **kwargs):

    if kwargs:
        try:
            self.length = int(kwargs.get('length'))
            self.bitstream = str(kwargs.get('bitstream'))
            self.location = int(kwargs.get('location'))
            self.subroutine = str(kwargs.get('subroutine'))
        except:
            print('exception intializing OverflowException\n')
            self.length = 0
            self.bitstream = ''

def __str__(self):
    if self.bitstream and self.length:
        if self.subroutine and self.location is not None:
            return f"OVERFLOW! Bitstream has {len(self.bitstream)} bits, exceeding {self.length} at index:{self.location} in {self.subroutine}"
        else:
            print('No location / subroutine found!\n')
            return f"OVERFLOW! Bitstream has {len(self.bitstream)} bits, exceeding {self.length}"
    else:
        return f"OVERFLOW!"