在Python中將二進制數據字符串轉換爲數值的最快方法是什麼?Python中的快速二進制數據轉換
我使用的是struct.unpack_from()
,但是達到了性能極限。
上下文:傳入流是混合的二進制和ASCII數據。 ASCII數據轉換在C中通過ctypes完成。通過ctypes實現在C中解壓縮產生了與解壓縮類似的性能。我的猜測是通話開銷太多了。我希望找到一種本地的類似C的強制方法(無論是非Pythonic)。最有可能所有這些代碼將需要移動到C.
該流是在網絡字節順序(big-endian),並且該機器是little-endian。轉換例是:
import struct
network_stream = struct.pack('>I', 0x12345678)
(converted_int,) = struct.unpack_from('>I', network_stream, 0)
我不太關心處理流格式,不是二進制轉換一般情況下,如果有甚至unpack
的替代品。例如,socket.ntohl()
需要一個int,而int()
不會轉換二進制數據字符串。
感謝您的建議!
您究竟是什麼開箱的?它只是一個統一的數值數組嗎? –
不幸的是,它是一個單身人士的混合流,其中的內容由一個標題表示。大部分轉換是針對4B整數和浮點數的。 – CNK
測試用例在這裏不錯 – Triptych