13

In python, how to convert a hex ASCII string to binary string?

Example:

01000001B8000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435362021222324

Needs to be converted to a binary string. (0A need to be converted to 1010, not to ASCII bit 1000001 which is 65)

edit : Changed "raw binary" in question to "raw internal binary" string for better clarity.

2
  • 1
    what do you mean by binary string? is it a string or a list of integers you`re interested in? Commented Dec 9, 2011 at 12:35
  • I mean internal binary representation . I got the answer as base64.b16decode Commented Dec 9, 2011 at 12:51

5 Answers 5

16
import base64
data = base64.b16decode("01000001B8000102030405")
Sign up to request clarification or add additional context in comments.

Comments

8

Is this what you're searching for?

hex_string = '0A'
'{0:b}'.format(int(hex_string, 16))
# returns '1010'

or

''.join('{0:04b}'.format(int(c, 16)) for c in hex_string)

4 Comments

thanks. But my string is very long. It wont fit in an integer. The converted binary shall go to some kind of continuous memory structures like array or so.
@LunarMushrooms - this works with your example string too. But I have added a special version for you…
Did you even try this on your string? It works great (ints can have any size): '100000000000000000000000110111000000000000000000100000010000000110000010000000101000001100000011100001000000010010000101000001011000011000000110100001110000011110001000000010001000100100001001100010100000101010001011000010111000110000001100100011010000110110001110000011101000111100001111100100000001000010010001000100011001001000010010100100110001001110010100000101001001010100010101100101100001011010010111000101111001100000011000100110010001100110011010000110101001101100010000000100001001000100010001100100100'
Thanks. But it is converting again to ascii string "1010" . As suggested in another answer , base64.b16decode worked for me
7

You probably need the .decode('hex') method of strings (Python 2.x).

data= ("01000001B8000102030405060708090A0B0C0D0E0F10111213141516"
    "1718191A1B1C1D1E1F202122232425262728292A2B"
    "2C2D2E2F303132333435362021222324")
data.decode('hex')

Otherwise, you can use base64.b16decode, but you might want to supply a True to the second parameter (casefold) if your input contains lowercase hex digits A to F.

Comments

4

I'm not quite sure what you mean by a "binary string". If you mean a string storing the binary data you can use the binascii module.

>>> data = "01000001B8000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435362021222324"
>>> import binascii
>>> binary = binascii.a2b_hex(data)
>>> binary
'\x01\x00\x00\x01\xb8\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456 !"#$'

However, if you really want a string containing lots of "0"s and "1"s you need to go one stage further:

>>> "".join("{:08b}".format(ord(i)) for i in binary)
'0000000100000000000000000000000110111000000000000000000100000010000000110000010000000101000001100000011100001000000010010000101000001011000011000000110100001110000011110001000000010001000100100001001100010100000101010001011000010111000110000001100100011010000110110001110000011101000111100001111100100000001000010010001000100011001001000010010100100110001001110010100000101001001010100010101100101100001011010010111000101111001100000011000100110010001100110011010000110101001101100010000000100001001000100010001100100100'

Comments

1

An easy way to do what you're trying to do... convert your string to a hex decimal then use the built in bin function to convert it to binary.

dec_string = int(your_string, 16) #cast as int

bin_string = bin(dec_string) #convert to binary

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.