Ascii to binary conversion

Mensanator mensanator at aol.com
Sat Aug 9 16:49:46 CEST 2008


On Aug 9, 8:18�am, azrael <jura.gro... at gmail.com> wrote:
> Hy folks,
>
> I googled, and searched, and can not bealive that I have not found a
> built in way to convert the easy and elegant python way a function to
> easily convert simple ascii data to binary and back.
>
> I've written some my own but they were pretty slow using binascii
> linbrary with hexifly and unhexifly functions conbined with a
> lookuptable of binary and hex values.
>
> Any idea how to easily write a function that recieves a character or
> string and returns a binary number like:
> ascii("1") is converted to bin("00110001")

In Pthon 2.6 & 3.0 there actually IS a bin() function.

IDLE 2.6b1
>>> bin(ord('1'))
'0b110001'

But it has that worthless '0b' decorator, but that's
easily dealt with.

>>> bin(ord('1'))[2:]
'110001'

And you won't get leading 0s unless you ask for them.

>>> bin(ord('1'))[2:].zfill(8)
'00110001'

If you have previous Python versions (and even if you
have 2.6), you might consider getting the gmpy module.
It will convert to any base from 2 to 36 and in addition,
provides a nice set of binary manipulation functions
such as popcount (number of 1-bits), scan1 (finds posistion
of first 1-bit), Hamming Distance (number of differing
bits between two numbers), etc.

>>> import gmpy

>>> gmpy.digits(ord('1'))    # base 10 by default
'49'

>>> gmpy.digits(ord('1'),2)  # same in base 2 (note - no decorator)
'110001'

>>> gmpy.digits(ord('1'),2).zfill(8) # add leading 0s
'00110001'

>>> gmpy.popcount(ord('1')) # of 1-bits
3

>>> gmpy.scan1(ord('1')) # the first 1 is at bit 0
0

>>> gmpy.scan1(ord('1'),1) # the next 1 is at bit 4
4

>>> gmpy.hamdist(ord('1'),ord('6')) # differ at 3 bit positions
3

And you probably won't find anything faster than gmpy.



More information about the Python-list mailing list