# [Tutor] Function for converting ints from base10 to base2?

Bob Gailer bgailer at alum.rpi.edu
Thu Feb 22 01:57:56 CET 2007

```David Perlman wrote:
> d'oh, I fell for the "reply-all" trick.  :)
>
> Here's the code in question:
>
> Apparently there are built in functions hex() and oct() to generate
> hexadecimal and octal digit strings of numbers, but there's no
> corresponding bin().  Kind of a bizarre oversight, if you ask me.
>
> Searching on the internet, I found this:
>
> def bin(integer, returnType=str):
> 	bin =
> {'0':'000','1':'001','2':'010','3':'011','4':'100','5':'101','6':'110','
> 7':'111'}
> 	if returnType == int:
> 		return int(''.join([bin[i] for i in oct(integer)]))
> 	elif returnType == long:
> 		return long(''.join([bin[i] for i in oct(integer)]),10)
> 	else:
> 		return (''.join([bin[i] for i in oct(integer)])).lstrip("0")
>
> Just define this in the program you are writing and use bin as you
> would use oct or hex, making sure to specify int or long as the return
> type if you don't want a str.
Here's a similar function, converting characters to their ascii values
as strings of 0 & 1. Perhaps some parts of this might be useful to
optimize the above.

def str_to_binary(s,
bin=('0000','0001','0010','0011','0100','0101',
'0110','0111','1000','1001','1010','1011','1100',
'1101','1110','1111')):
return " ".join( [bin[x]+bin[y] for x,y in [divmod(ord(c),16) for c in
s]])

Note that by making bin a parameter it gets created one time when the
def is executed. And indexing a list is faster than keying a dict.

--
Bob Gailer
510-978-4454

```