The int() function in Python converts a string to an integer. But this function has the second default parameter: base. The base can be between 2 (you need to have at least 2 different values) and 36 (numbers + letters). The default value is 10.
Both examples return the same result:
print(int('156'))
print(int('156', 10))
Result:
156 156
This means, by how many elements the value will be represented. Look at the following table to see how it works.
| Base | available numbers and letters |
| 2 | 01 |
| 3 | 012 |
| 4 | 0123 |
| 5 | 01234 |
| 6 | 012345 |
| 7 | 0123456 |
| 8 | 01234567 |
| 9 | 012345678 |
| 10 | 0123456789 |
| 16 | 0123456789abcdef |
| 20 | 0123456789abcdefghij |
| 36 | 0123456789abcdefghijklmnopqrstuwvxyz |
Now, take a look at the following examples:
print(int('10011100001111', 2))
print(int('111201100', 3))
print(int('2130033', 4))
print(int('304444', 5))
print(int('114143', 6))
print(int('41103', 7))
print(int('23417', 8))
print(int('14640', 9))
print(int('9999', 10))
print(int('270f', 16))
print(int('14jj', 20))
print(int('7pr', 36))
All of these lines return the same result, which is 9999.
If you want to convert an integer to binary (2), octal (8), hex (16) or any other base between 2 and 36, you can use the following function.
def dec_to_base(number, base, characters='0123456789abcdefghijklmnopqrstuvwxyz'):
if base < 2 or base > len(characters):
raise ValueError("Base value must be between 2 and 36")
if number == 0:
return '0'
if number < 0:
sign = '-'
number = -number
else:
sign = ''
result = ''
while number:
result = characters[number % (base)] + result
number //= base
return sign + result
Now use the following code to display values.
print(dec_to_base(9999, 2)) print(dec_to_base(9999, 3)) print(dec_to_base(9999, 4)) print(dec_to_base(9999, 5)) print(dec_to_base(9999, 6)) print(dec_to_base(9999, 7)) print(dec_to_base(9999, 8)) print(dec_to_base(9999, 9)) print(dec_to_base(9999, 10)) print(dec_to_base(9999, 16)) print(dec_to_base(9999, 20)) print(dec_to_base(9999, 36))
It will return the following result.
10011100001111 111201100 2130033 304444 114143 41103 23417 14640 9999 270f 14jj 7pr