如何在Python中将二进制字符串转换为ASCII字符串?

8
我制作了一个小的Python程序,它从文件中读取二进制并将其存储到文本文件中,然后读取文本文件并存储二进制。但是,我无法让二进制正常工作...它像这样读取文件:
f_bin = open(bin_file,"rb")
to_bin_data = f_bin.read()
bin_data = bin(reduce(lambda x, y: 256*x+y, (ord(c) for c in to_bin_data), 0))
f_bin.close()

这个不适用于我... 将二进制转换为ASCII和反之亦然 类似这个网页:http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/Binary_To_Text.asp 编辑:我已经为它编写了一个长的if else脚本,但还是谢谢你的回答。

f_bin.close 不会调用任何东西,你必须添加 ()。只是一个提示,它与你的问题无关。 - Jonas Schäfer
我忘记粘贴括号了... - user1469729
1
“doesen't work for me” 不是很具体。你的输入 repr(to_bin_data) 是什么?期望的输出是什么,而你得到了什么? - jfs
3个回答

11

我们来看一下单词“hello”,它的二进制表示为0110100001100101011011000110110001101111

为了将其翻译回字符,我们可以使用chrint(基数为2),以及一些列表切片操作...

''.join(chr(int(bin_text[i:i+8], 2)) for i in xrange(0, len(bin_text), 8))

如果我们想要将'hello'转换为二进制,我们可以使用ord和字符串格式化...

''.join('{:08b}'.format(ord(c)) for c in 'hello')

3
也许你可以使用内置函数:
>>> myString = "hello"
>>> ba = bytearray(myString)
>>> ba[0]
104
>>> bin(ba[0])
'0b1101000'

分割 0b

>>> bin(ba[0]).split('b')[1]
'1101000'

或者

>>> bin(ba[0])[2:]
'1101000'

我希望你能通过代码片段解决你的问题! :)

使用 x = int('1101000', 2)ba = bytearray([x])str(ba) - Themerius
2
bin() 可以使用,但为了保持一致性,您需要在长度为8的情况下进行零填充(例如,bin(3).split('b')[1] 是 '11',应该是 '00000011')。 - Jon Clements
''.join(map(binary_repr,bytearray("hello"))) - user2290820

2

我使用struct模块:

import struct
buf=struct.unpack('c',to_bin_data) # for one character
buf=struct.unpack('s',to_bin_data) # for a string 

编辑:抱歉,误解了问题......这适用于二进制数据,而不适用于字符的二进制表示字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接