murphy=raw_input("Enter your message: ")
infile=open("C:\Users\Livio\Desktop\IMO2015.bmp","rb")
header=infile.read(54)
body=infile.read()
message=open("C:\Users\Livio\Desktop\IMO2015.bmp","rb")
messagecontent=message.read()
outfile=open("C:\Users\Livio\Desktop\Output.bmp","wb")
outfile.write(header)
def b10tob2(num):
out=[]
power=0
while num>0:
digit=num%(2**(power+1))
num=num-digit
out.append(digit/(2**power))
power=power+1
while len(out)<8:
out.append(0)
return out
y=0
for x in messagecontent:
base2list=b10tob2(ord(x))
for z in base2list:
if ord(body[y])==255:
z=z*(-1)
outfile.write(chr(ord(body[y])+z))
y=y+1
outfile.write(body[0:len(body)])
当我运行此代码时,我得到输出文件,但是我也收到一个错误,显示以下文字:
string index out of range
我该怎么做才能解决这个无聊的错误?
答案 0 :(得分:1)
据推测,例外来自if ord(body[y])==255:
,因为在某些时候,y
会变得大于len(body)
。
这似乎很明显应该发生。 messagecontent
是.bmp
文件的全部内容。 body
是同一个.bmp
文件的内容减去前54个字节。对于messagecontent
中的每个字节,您需要将y
递增8次,因此在某些时候您很快就会超过body
的结尾。
为了使其更具体,让我们说该文件长度为854字节。因此,body
是800字节,messagecontent
是854字节。因此,对于messagecontent
的第一个字节,循环遍历该字节的8位,递增y
8次。对于第二个字节,同样的事情。在100字节之后,您现在最多为800.因此,对于第101个字节,您尝试阅读body[800]
,这会引发IndexError
。
由于我不知道这段代码应该做什么,我不能告诉你应该做什么。但我可以告诉你,尝试访问此列表的末尾肯定是而不是你应该做什么。