擅长:python、mysql、java
<p>由于您有一个字节字符串,并且您想去掉最右边的8位(即一个字节),您可以简单地从字节字符串中删除它:</p>
<pre><code>>>> b'\x93\x4c\x00'[:-1]
b'\x93L'
</code></pre>
<p>如果要将其转换为整数,可以使用Python的<a href="http://docs.python.org/3/library/struct.html" rel="nofollow">struct</a>将其解包。正如您正确地说的,您需要固定的大小才能使用结构,因此您只需填充字节字符串即可添加所需数量的零:</p>
<pre><code>>>> data = b'\x93\x4c\x00'
>>> data[:-1]
b'\x93L'
>>> data[:-1].rjust(4, b'\x00')
b'\x00\x00\x93L'
>>> struct.unpack('>L', data[:-1].rjust(4, b'\x00'))[0]
37708
</code></pre>
<p>当然,也可以先将其转换,然后将8位从结果整数中移开:</p>
<pre><code>>>> struct.unpack('>Q', data.rjust(8, b'\x00'))[0] >> 8
37708
</code></pre>
<p>如果要确保实际解释的位不超过13位(位8到21),则必须应用位掩码<code>0x1FFF</code>当然:</p>
<pre><code>>>> 37708 & 0x1FFF
4940
</code></pre>
<p>(如果您需要大端点,只需分别使用<code><L</code>或<code><Q</code>。)</p>
<hr/>
<p>如果您真的是从左到右计数位(这可能不常见,但可以),那么您也可以使用填充技术:</p>
<pre><code>>>> struct.unpack('>Q', data.ljust(8, b'\x00'))[0] >> 43
1206656
</code></pre>
<p>注意,我们正在将填充添加到另一侧,并将其移动43位(对于不需要查看的填充数据,您的3位加上5个字节)</p>