由於您使用bytes
和bytes
文字我猜你在Python 3中,在這種情況下,你必須轉換字節的任意運行到int
一個更好的常規選項。 Python 3在一個轉換器中有着驚人的效果。舉個例子:
>>> int.from_bytes(b'\xff\xff\xce', 'big', signed=True)
-50
它縮放到很大的尺寸,運行速度比其他任何可用的。
如果你不使用Python 3的時候,這是稍微難看,但還是相當快:
import binascii
def int_from_bytes(b):
x = int(binascii.hexlify(b), 16)
mask = 1 << (len(b) << 3) - 1
if x & mask:
x -= mask << 1
return x
它得到了相同的結果Python 3的內置當你這樣做:
>>> int_from_bytes(b'\xff\xff\xce')
-50
注性能:預編譯struct.Struct
會贏,倒手,如果這真的是一個填充字節之後是簽署short
,沒有可變長度廢話一樣簡單。在這種情況下,你會預編譯Struct
有:
unpacker = struct.Struct('>xh').unpack
然後你可以使用它像這樣:
x, = unpacker(b'\xff\xff\xce')
後面的逗號是很重要的(Struct.unpack
在這種情況下返回長度1元組,並分配給x,
將單個值解包爲x
可能的最有效方式
您能描述一下您想實現的語義嗎? – MaxNoe