我想从文件中读取字节1,2和3。我知道它对应一个字符串(在这种情况下它是Linux二进制头的ELF
)
我可以在网上找到以下示例,我想出了这个:
with open('hello', 'rb') as f:
f.seek(1)
bytes = f.read(3)
string = struct.unpack('s', bytes)
print st
查看struct的官方文档,似乎将s
作为参数传递应该允许我读取字符串。
我收到错误:
st = struct.unpack('s', bytes)
struct.error: unpack requires a string argument of length 1
编辑:使用Python 2.7
答案 0 :(得分:2)
在您的特殊情况下,只需检查
即可if bytes == 'ELF':
一步测试所有三个字节为三个字符E
,L
和F
。
但是如果你想检查数值,你也不需要在这里打开任何东西。只需使用ord(bytes[i])
(在0,1,2中使用i)来获取三个字节的字节值。
或者你可以使用
byte_values = struct.unpack('bbb', bytes)
获取三个字节的元组。你也可以动态解包那个元组,以防这些字节具有如下的可命名语义:
width, height, depth = struct.unpack('bbb', bytes)
如果您的字节值无符号,请使用'BBB'
代替'bbb'
。
答案 1 :(得分:2)
在Python 2中,read
返回一个字符串;在“字符串”的意义上。要获得单个字节,请使用bytes[i]
,它将返回另一个字符串,但只有一个字节。如果您需要字节的数值,请使用ord
:ord(bytes[i])
。最后,要获取所有字节的数值,请使用map(ord, bytes)
。
In [4]: s = "foo"
In [5]: s[0]
Out[5]: 'f'
In [6]: ord(s[0])
Out[6]: 102
In [7]: map(ord, s)
Out[7]: [102, 111, 111]