Convert hexadecimal string to binary

E

Eric

Guys,
I have the following hexadecimal string - '\xff\xff\xff' which i need
to convert to binary.

How would i go about doing this?

Eric
 
P

Peter Hansen

Eric said:
I have the following hexadecimal string - '\xff\xff\xff' which i need
to convert to binary.

How would i go about doing this?

You'll need to explain more clearly, and possibly change how you
view such things, before anyone can help you with certainty.

What you show above is a *binary* sequence of bytes containing
three bytes, each with the value 255. The representation of
it which you copied (?) from the console contains printable
characters and extra stuff to make it easier to read, but that's
what you get from repr() on a binary string.

Do you actually want a string containing the six printable
characters 'FFFFFF'? If that's the case, it's not what you
would usually call "binary". Anyway, use binascii.hexlify()
for that...

Can you give an example of the output you really want? How
many bytes does it contain? How does it differ from the string
above?

-Peter
 
H

Harry George

Guys,
I have the following hexadecimal string - '\xff\xff\xff' which i need
to convert to binary.

How would i go about doing this?

Eric

Assuming you mean the result is a string of "1" and "0" chars, here is
a mechanism. We use a lookup to avoid converting to and from internal
numbers.

#---x is the data---
x='\xff\xff\xff'
#---notice it is actually a sequence of 8-bit bytes---
#---generate a dictionary of all 256 values and their binary codings---
bits={'\x00':'00000000',
'\x01':'00000001',
..........
'\xff':'11111111'}

#---collect answer in buffer---
s=StringIO.StringIO()
for byte in x:
s.write(bits[byte])

#---report result---
print s.getvalue()
 
B

Bengt Richter

Guys,
I have the following hexadecimal string - '\xff\xff\xff' which i need
to convert to binary.

How would i go about doing this?
Assuming that string is the representation of a string of bytes whose binary
values are 255 (or hex 0xff), and you want to view it like a big-endian
number representation, and convert it to an integer (or long, if it gets big),
>>> def s2i(s): return sum([ord(c)*256**i for i,c in enumerate(s[::-1])]) ...
>>> s2i('\xff\xff\xff') 16777215
>>> hex(s2i('\xff\xff\xff')) '0xffffff'
>>> hex(s2i('\x01\x02\x03')) '0x10203'
>>> hex(s2i('\x01\x02\x03\x04')) '0x1020304'
>>> hex(s2i('\x01\x02\x03\x04\x05')) '0x102030405L'
>>> hex(s2i('\x01\x02')) '0x102'
>>> s2i('\x01\x02')
258

Note that this is unsigned --
'0x80000000L'

You could do it other and faster ways...

Regards,
Bengt Richter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top