2012-08-07 27 views
1

我对python非常陌生,使用python 2.7。我必须读入二进制文件,然后将一些字节连接在一起。所以我试了从python列表中访问二进制数据时出错

f = open("filename", "rb") 
j=0 
infile = [] 
try: 
    byte = f.read(1) 
    while byte != "": 
     infile.append(byte) 
     byte = f.read(1) 
finally: 
    f.close() 
blerg = (bin(infile[8])<<8 | bin(infile[9])) 
print type 

我意识到重铸为二进制可能是不必要的,但这是我以后的尝试之一。

我得到的错误是TypeError:'str'对象不能被解释为索引。 这是我的新闻,因为我没有在任何地方使用字符串。我做错了什么!@#%?

编辑:完整回溯 文件binaryExtractor.py 25行,在 blerg =(仓(infile中[8])< < 8 |仓(infile的[9])) 类型错误: 'STR' 对象不能解释为索引

+1

请发布完整的回溯。此外,代码中的缩进也是关闭的。 'type'是内建函数(或内建类型),所以最好不要将它用作变量名称。 – 2012-08-07 20:17:29

+0

“因为我没有使用任何字符串”:'bin'返回一个字符串,虽然。 – DSM 2012-08-07 20:23:02

+0

http://mywiki.wooledge.org/XyProblem – 2012-08-07 20:23:59

回答

1

想要使用ord函数,该函数返回单个字符串中的整数,而不是返回二进制数的字符串表示形式的bin

+0

哎呀,希望你在我申请忍者修复之前没有看到这个答案。 – 2012-08-07 20:29:57

+0

我做到了。然后我刷新了它,非常高兴。 – bigbenbt 2012-08-07 20:32:12

2

您应该尽可能使用struct而不是为此编写自己的代码。

>>> struct.unpack('<H', '\x12\x34') 
(13330,)