在python中,如何将十六进制ascii字符串转换为原始内部二进制字符串?

时间:2011-12-09 12:25:52

标签: python

在python中,如何将十六进制ASCII字符串转换为二进制字符串?

示例:

  

01000001B8000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435362021222324

需要转换为二进制字符串。 (0A需要转换为1010,而不是转换为1000001的ASCII位65

编辑:将问题中的“原始二进制”更改为“原始内部二进制”字符串,以便更清晰。

5 个答案:

答案 0 :(得分:14)

import base64
data = base64.b16decode("01000001B8000102030405")

答案 1 :(得分:9)

这是你正在寻找的吗?

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

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

答案 2 :(得分:7)

您可能需要.decode('hex')字符串方法(Python 2.x)。

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

否则,您可以使用base64.b16decode,但如果您的输入包含小写十六进制数字A到F,则可能需要为第二个参数(casefold)提供True。

答案 3 :(得分:2)

我不太确定你的意思是“二进制字符串”。如果您指的是存储二进制数据的字符串,则可以使用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 !"#$'

但是,如果你真的想要一个包含大量"0""1"的字符串,你需要更进一步:

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

答案 4 :(得分:1)

执行您要执行的操作的简单方法...将您的字符串转换为十六进制十进制,然后使用内置bin函数将其转换为二进制。

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

bin_string = bin(dec_string) #convert to binary