在python中,如何将十六进制ASCII字符串转换为二进制字符串?
的例子:
01000001 b8000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435362021222324
需要转换为二进制字符串。(0A
需要转换为1010
,而不是ASCII位1000001
,即65
)
edit:将"raw binary"更改为"raw internal binary"字符串,以便更清晰。
import base64
data = base64.b16decode("01000001B8000102030405")
这是你要搜索的吗?
hex_string = '0A'
'{0:b}'.format(int(hex_string, 16))
# returns '1010'
或
''.join('{0:04b}'.format(int(c, 16)) for c in hex_string)
您可能需要字符串的.decode('hex')
方法(Python 2.x)。
data= ("01000001B8000102030405060708090A0B0C0D0E0F10111213141516"
"1718191A1B1C1D1E1F202122232425262728292A2B"
"2C2D2E2F303132333435362021222324")
data.decode('hex')
否则,您可以使用base64.b16decode
,但如果您的输入包含小写十六进制数字a到f,您可能希望为第二个参数(casefold
)提供True
我不太确定你所说的"二进制字符串"是什么意思。如果您指的是存储二进制数据的字符串,您可以使用binascii
模块。
>>> data = "01000001B8000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435362021222324"
>>> import binascii
>>> binary = binascii.a2b_hex(data)
>>> binary
'x01x00x00x01xb8x00x01x02x03x04x05x06x07x08tnx0bx0crx0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f !"#$%&'()*+,-./0123456 !"#$'
然而,如果你真的想要一个包含大量"0"
和"1"
的字符串,你需要更进一步:
>>> "".join("{:08b}".format(ord(i)) for i in binary)
'0000000100000000000000000000000110111000000000000000000100000010000000110000010000000101000001100000011100001000000010010000101000001011000011000000110100001110000011110001000000010001000100100001001100010100000101010001011000010111000110000001100100011010000110110001110000011101000111100001111100100000001000010010001000100011001001000010010100100110001001110010100000101001001010100010101100101100001011010010111000101111001100000011000100110010001100110011010000110101001101100010000000100001001000100010001100100100'
一个简单的方法来做你想做的事情…将字符串转换为十六进制十进制,然后使用内置的bin函数将其转换为二进制。
dec_string = int(your_string, 16) #cast as int
bin_string = bin(dec_string) #convert to binary