code: def pack_bitstring(length, is_float, value, signed):
      
      if is_float:
          types = {
              32: '>f',
              64: '>d'
          }
  
          float_type = types[length]
          x = bytearray(struct.pack(float_type, value))
          bitstring = ''.join('{:08b}'.format(b) for b in x)
      else:
          b = '{:0{}b}'.format(int((2<<length )+ value), length)
          bitstring = b[-length:]
  
      return bitstring
docs: returns a value in bits
      :param length: length of signal in bits
      :param is_float: value is float
      :param value: value to encode
      :param signed: value is signed
      :return: