Python 将二进制转换为ASCII,将ASCII转换为二进制

Python 将二进制转换为ASCII,将ASCII转换为二进制,python,binary,ascii,Python,Binary,Ascii,我目前正在为一个学校项目用Python编写一个ascii二进制/二进制ascii转换器,在将ascii(字符串文本)转换为二进制时遇到了一个问题。其思想是在代码底部的test()中打印结果 在WingIDE中运行代码时,出现错误: 从 bnary = bnary + binary[chnk] KeyError:“挪威在30:28打昏了波兰,破坏了比莱斯基的生日派对。” 我在这里要做的是将存储在“text.txt”中的文本字符串转换为整数字符串,然后打印这个二进制字符串。 非常感谢您的帮助。我试

我目前正在为一个学校项目用Python编写一个ascii二进制/二进制ascii转换器,在将ascii(字符串文本)转换为二进制时遇到了一个问题。其思想是在代码底部的test()中打印结果

在WingIDE中运行代码时,出现错误: 从

bnary = bnary + binary[chnk]
KeyError:“挪威在30:28打昏了波兰,破坏了比莱斯基的生日派对。”

我在这里要做的是将存储在“text.txt”中的文本字符串转换为整数字符串,然后打印这个二进制字符串。

非常感谢您的帮助。我试着研究其他ascii二进制转换相关的问题,反之亦然,但似乎没有一个适合我

我的代码:

def code():
二进制={}
ascii={}
#生成ascii码
对于范围内的i(0128):
ascii[格式(i,'08b')]=chr(i)
#反转ascii码,这将是二进制的
对于ascii.iteritems()中的k,v:
binary[v]=binary.get(v,[])
二进制[v]。追加(k)
返回ascii码
def编码(文本,二进制):
'''
使用源文本对某些文本进行编码
'''
bnary=“”
fi=打开(文本,模式='rb')
尽管如此:
chnk=fi.read()
如果chnk='':
打破
如果chnk!='\n':
binry=“”
b进制=b进制+二进制[chnk]
返回b进制
def解码(源代码,n,ascii):
'''
使用大小为n的块解码源代码
'''
句子=“”
f=open(sourcecode,mode='rb')#打开一个文件名为的文件
尽管如此:
chunk=f.read(n)#从打开的文件中一次读取n个字符
如果chunk='':#这是在Python中检查文件结尾的一种方法
打破
如果区块!='\n':
setence=”“#生成的ascii语句
#造句
句子=句子+ascii[块]
返回判决
def test():
'''
一些测试用例的占位符。
建议您使用一些现有的框架,如unittest,
但是对于一个临时的测试,在一个开发版本中是可以完成的
直接在模块中。
'''
打印编码('text.txt',code())
打印解码('sourcecode.txt',8,code())
测试()
fi.read()第一次返回整个文档,第二次返回“”。所以你应该这么做

text = fi.read()
for char in text:
     do_stuff()
Edit1

您只能读取文件一次。因此,你必须一个接一个地得到你的咒语。file.read返回包含整个文档的字符串

可以对字符串进行迭代以逐个获取字符

主要错误是您的
二进制
{“a”:['010001110'],“b”:…}
并且您尝试使用
键“azerty”
访问,您应该在其中逐字符访问:

string = "azer"
result = []
for c in string:
    result += binary[c]

 >>> result = [['11001'],[1001101'],...]

这将为您提供文件中每个字符的整数值(来自ascii),逐行

如果您要解码和编码,请使用以下解决方案

将ascii编码到bin

def toBinary(string):
    return "".join([format(ord(char),'#010b')[2:] for char in string])
将bin编码为ascii码

def toString(binaryString):
    return "".join([chr(int(binaryString[i:i+8],2)) for i in range(0,len(binaryString),8)])

仅供参考,“挪威击昏波兰30:28并破坏Bielecki的生日派对。”是“text.txt”的内容。请更具体地说明ASCII和二进制之间的转换意味着什么。您的意思是将二进制存储的整数转换为ASCII表示形式,然后再转换回来吗?如果是这样的话,ASCII的基数是:二进制、十进制还是其他?如果不是这样,你是什么意思?(在阅读代码之前,我会问这个问题,因为这些问题是判断代码的基础。)在
encode
方法中有
binary
bnary
binry
是故意的吗?是的,它是基于
def decode()
方法的,该方法有
语句
setence
。那是什么Python?2.7或3.X?尝试了您的建议:
def encode(text,binary):bnary=”“fi=open(text,mode='rb'),而True:text=fi.read()表示text:binry=”“bnary=bnary+binary[text]return bnary
I仍然得到与以前相同的错误;“KeyError:“Norway Stunk Poland 30:28(…)”您的程序中的错误比这个多,但让我们一步一步来。请检查此链接的格式(n)部分:或者创建自己的二进制函数,该函数接受一个整数作为输入,并返回它的二进制等价网络。谢谢,这很有魅力!非常感谢。@MortenAmundsen:除了接受最有用的答案(你做了)之外,你也应该投票选出所有好的答案,当然包括被接受的答案。这是表达感激之情的完整方式。
def toBinary(string):
    return "".join([format(ord(char),'#010b')[2:] for char in string])
def toString(binaryString):
    return "".join([chr(int(binaryString[i:i+8],2)) for i in range(0,len(binaryString),8)])