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

在python中,如何将十六进制ascii字符串转换为原始的内部二进制字符串?,python,Python,在python中,如何将十六进制ASCII字符串转换为二进制字符串 例如: 01000001B8000102030405060708090A0B0C0D0E0F1011112131415161718191A1B1C1D1E1F20212224252627292A2B2C2D2E2F3031323334353621222324 需要转换为二进制字符串。(0A需要转换为1010,而不是转换为ASCII位1000001,即65) 编辑:为了更清晰,将问题中的“原始二进制”更改为“原始内部二进制”字符串

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

例如:

01000001B8000102030405060708090A0B0C0D0E0F1011112131415161718191A1B1C1D1E1F20212224252627292A2B2C2D2E2F3031323334353621222324

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


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

这就是您要搜索的内容吗

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


我不太清楚你所说的“二进制字符串”是什么意思。如果您指的是存储二进制数据的字符串,则可以使用

但是,如果您确实想要一个包含大量
“0”和
“1”
的字符串,则需要进一步执行以下步骤:

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

您可能需要字符串的
.decode('hex')
方法(Python2.x)


否则,您可以使用
base64.b16decode
,但如果您的输入包含小写十六进制数字a到F,您可能希望为第二个参数(
casefold
)提供一个True。这是一种简单的方法,可以完成您试图执行的操作。。。将字符串转换为十六进制十进制,然后使用内置的bin函数将其转换为二进制

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

bin_string = bin(dec_string) #convert to binary

谢谢但是我的绳子很长。它不适合整数。转换后的二进制文件将进入某种连续的内存结构,比如数组等等。@LunarMushrooms-这也适用于您的示例字符串。但是我为你添加了一个特别的版本…你在你的字符串上试过这个吗?它工作得很好(
int
s可以有任何大小):
'10000000000000000000000000011101110000000000000000000000000010000001100000011000000100000001010000001100000110000100000100000100000100000101000001010000010110011000010001100000010000001000100110001010000010100010110000010111000110011001100110011001100110011001100110011001100100001010000011100110011100001000000100000100000100000100011000001100000010010100100110001001110010100001010010010101000101011001011000001011010010111000101111001100000110001011001100110011001100110011001100110011001100110010000101010101100010000001001000100100100'
谢谢。但它正在再次转换为ascii字符串“1010”。正如在另一个答案中所建议的那样,base64.b16decode对我来说是有效的。你所说的二进制字符串是什么意思?你感兴趣的是字符串还是整数列表?我指的是内部二进制表示。我得到的答案是base64.b16解码
>>> 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 !"#$'
>>> "".join("{:08b}".format(ord(i)) for i in binary)
'0000000100000000000000000000000110111000000000000000000100000010000000110000010000000101000001100000011100001000000010010000101000001011000011000000110100001110000011110001000000010001000100100001001100010100000101010001011000010111000110000001100100011010000110110001110000011101000111100001111100100000001000010010001000100011001001000010010100100110001001110010100000101001001010100010101100101100001011010010111000101111001100000011000100110010001100110011010000110101001101100010000000100001001000100010001100100100'
data= ("01000001B8000102030405060708090A0B0C0D0E0F10111213141516"
    "1718191A1B1C1D1E1F202122232425262728292A2B"
    "2C2D2E2F303132333435362021222324")
data.decode('hex')
dec_string = int(your_string, 16) #cast as int

bin_string = bin(dec_string) #convert to binary