<p>您可以使用<a href="https://docs.python.org/2/library/stringio.html" rel="noreferrer">StringIO</a>像读取文件一样读取字符串</p>
<pre><code>>>> import StringIO
>>> s = 'Hello, World!'
>>> sio = StringIO.StringIO(s)
>>> sio.read(6)
'Hello,'
>>> sio.read()
' World!'
</code></pre>
<p>我还建议您查看<a href="https://docs.python.org/2/library/struct.html" rel="noreferrer">struct</a>模块,以获得解析二进制数据的帮助</p>
<pre><code>>>> from struct import *
>>> pack('hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
</code></pre>
<p>您可以使用格式字符串定义数据的格式,因此上例中的<code>'hhl'</code>是<code>short (2 bytes), short (2 bytes), int (4 bytes)</code>。它还支持在格式字符串中指定endianness(字节顺序)。</p>
<p>例如,如果头格式是<code>uint, 4 byte str, uint, uint, ushort, ulong</code>:</p>
<pre><code>>>> import struct
>>> data = ''.join(chr(i) for i in range(128)) * 10
>>> hdr_fmt = 'I4sIIHL'
>>> struct.calcsize(hdr_fmt)
32
>>> struct.unpack_from(hdr_fmt, data, 0)
(50462976, '\x04\x05\x06\x07', 185207048, 252579084, 4368, 2242261671028070680)
</code></pre>