擅长:python、mysql、java
<p>这取决于两个字节的长度如何存储在数据中,例如,如果文件的前两个字节(十六进制)是<code>00 01</code>这是否意味着后面的消息是<code>1</code>字节长还是<code>256</code>字节长?这被称为big或little endian格式。尝试以下两种方法,其中一种应该会给出更有意义的结果,它是为读取消息长度块中的数据而设计的:</p>
<p><strong>大端格式</strong></p>
<pre><code>import struct
with open('test.bin', 'rb') as f_input:
length = f_input.read(2)
while len(length) == 2:
print f_input.read(struct.unpack(">H", length)[0])
length = f_input.read(2)
</code></pre>
<p><strong>Little-endian格式</strong></p>
^{pr2}$
<p>实际数据需要进一步处理。<code>H</code>告诉struct将这2个字节作为<code>unsigned short</code>处理(即,该值永远不能被认为是负的)。在</p>
<p>另一个需要考虑的问题是,有时长度包含自身,因此长度为2可能意味着一条空消息。在</p>