acubal acubal - 1 year ago 114
Python Question

How to avoid invalid token when converting binary to decimal

Okay. first of all i know there is a built-in function converting binary to decimal but i thought i challenge myself and make my own.

Here are the codes....

def binaryToDecimal(binary):
binaryList = list(str(binary))
exponent = len(binaryList) - 1
decimal = 0

for char in binaryList:
bit = int(char)
decimal += bit * (2 ** exponent)
exponent -= 1


The problem is, i know if i want to begin my binary with 0, i have to use 0b prefix to avoid an invalid token but it leads me to a problem. It doesn't convert the last 1 on the left


So it outputs 14 instead of 142

How do i fix that? Also is there a way i can just say


without getting an invalid token without using 0b prefix?

I'm using Python 3.5

Answer Source

Youre problem is mainly binaryList = list(str(binary)). str(0b010001110) returns '142', not '0b101010' as you might expect.

Consequently, binaryList is ['1', '4', '2'].

A coincidence made that 1 * 2**2 + 4 * 2**1 + 2 equals 14, which gives the impression that you're function don't treat the last digit.

But, if you're running you're function with 0b101010 as input, you get 10.

A solution to get the binary representation as string is to pass to format:


Which returns

['1', '0', '0', '0', '1', '1', '1', '0']
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download