파이썬에서 이진 데이터 문자열을 숫자 값으로 변환하는 가장 빠른 방법은 무엇입니까?파이썬에서 빠른 이진 데이터 변환
나는 struct.unpack_from()
을 사용하고 있지만 성능 제한이 있습니다.
컨텍스트 : 들어오는 스트림은 2 진수와 ASCII 데이터가 혼합되어 있습니다. ASCII 데이터 변환은 ctype을 통해 C에서 수행됩니다. ctypes를 통해 C에서 압축 풀기를 구현하면 압축을 풀 때와 비슷한 성능이 나타납니다. 내 생각 엔 전화 오버 헤드가 너무 많은 요인이었다. 나는 네이티브 C와 같은 강제 변환 방법 (un Pythonic)을 찾기를 희망했다. 대부분이 코드는 C로 이동해야합니다.
스트림은 네트워크 바이트 순서 (빅 엔디안)이며 시스템은 리틀 엔디안입니다. 내가 바이너리 변환의 일반적인 경우보다, 스트림 형식 처리에 대해 덜 걱정
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