[Tutor] to/from binary to/from integer (i.e.'01010101' = 85)

Todd G. Gardner piir at earthlink.net
Fri Jan 2 14:52:33 EST 2004


Don,

I am not positive if I should give you the greatly deserved thank you so if
I am wrong I apologize, but THANK YOU.

I thank you SO much for this code.  int and convert functions it seems to
work perfectly all bases that I need!

Thanks again,

Todd
-----Original Message-----
From: don arnold [mailto:darnold02 at sprynet.com]
Sent: Friday, January 02, 2004 12:17 PM
To: Todd G. Gardner; Tutor at Python. Org
Subject: Re: [Tutor] to/from binary to/from integer (i.e.'01010101' =
85)


----- Original Message -----
From: "Todd G. Gardner" <piir at earthlink.net>
To: "Tutor at Python. Org" <tutor at python.org>
Sent: Friday, January 02, 2004 7:43 AM
Subject: [Tutor] to/from binary to/from integer (i.e.'01010101' = 85)


> Hello everyone,
>
> I was wondering if anyone happens to know how to convert to/from binary
> to/from integer (i.e.'01010101' = 85)
>
> Thanks for any pointers,
>
> Todd

The int() function will do the conversion from binary (and other bases)
for you if you supply the optional base parameter:

>>> int('1111111',2)
127
>>> int('001',2)
1
>>> int('17',8)
15

I _thought_ there was a function somewhere to convert an int to a binary
string,
but I couldn't find it. So, here's a function that will convert an int to
string of any
base up to 36:

import string

digits = string.digits + string.ascii_uppercase

def convert(num, base):
    res = []

    divisor = 1
    while num >= divisor * base:
        divisor *= base

    remainder = num

    while divisor >= 1:
        index, remainder = divmod(remainder,divisor)
        res.append(digits[index])
        divisor /= base

    res = ''.join(res)

    if int(res, base) != num:
        raise 'bad conversion!'

    return res

if __name__ == '__main__':
    while 1:
        num = raw_input('number to convert: ')
        if num == '':
            break
        num = int(num)
        base = int(raw_input('base             : '))
        print '%d in base %d is %s' % (num, base, convert(num,base))
        print


[example output:]

number to convert: 255
base             : 2
255 in base 2 is 11111111

number to convert: 255
base             : 16
255 in base 16 is FF

number to convert: 255
base             : 10
255 in base 10 is 255

number to convert: 255
base             : 8
255 in base 8 is 377

number to convert:


HTH,
Don




More information about the Tutor mailing list