¿Cuál es el método más rápido para convertir una cadena de datos binarios a un valor numérico en Python?conversión rápida de datos binarios en Python
Estoy usando struct.unpack_from()
, pero estoy alcanzando un límite de rendimiento.
Contexto: una secuencia entrante es una mezcla de datos binarios y ASCII. La conversión de datos ASCII se realiza en C aunque ctypes. Implementar el desempaquetado en C a través de ctypes produjo un rendimiento similar para desempaquetar. Mi suposición es que la llamada sobrecarga fue demasiado factor. Esperaba encontrar un método de coerción nativo tipo C (sin embargo antipático). Lo más probable es que todo este código deba moverse a C.
La transmisión está en orden de bytes de red (big-endian) y la máquina es little-endian. Un ejemplo sería la conversión:
import struct
network_stream = struct.pack('>I', 0x12345678)
(converted_int,) = struct.unpack_from('>I', network_stream, 0)
estoy menos preocupado por el manejo del formato de flujo, que en el caso general de conversión binaria, y si hay incluso una alternativa a unpack
. Por ejemplo, socket.ntohl()
requiere un int, y int()
no convertirá una cadena de datos binarios.
¡Gracias por sus sugerencias!
¿Qué está desempacando exactamente? ¿Es simplemente una matriz uniforme de valores numéricos? –
Desafortunadamente es una secuencia mixta de singletons, donde el contenido se indica mediante un encabezado. La mayor parte de la conversión es para enteros y flotantes 4B. – CNK
caso de prueba sería bueno aquí – Triptych