Tipos de enteros de ancho fijo (por ejemplo, uint32) en Python

Ciertas operaciones matemáticas, especialmente en datos leídos de controladores de hardware, pueden depender de un ancho fijo del tipo de datos. Ejemplo: desplazamiento a nivel de bits. ¿Cuál es la forma Pythonic de crear variables enteras con ancho fijo (por ejemplo, uint32, int16, etc.) que se desbordarían / ​​cambiarían en consecuencia?

Sugeriría la biblioteca fixint . Las clases en esa biblioteca se nombran en la siguiente convención:

[Mutable][U]Int 

Así que para tus dos ejemplos, las clases serían

 # C++ Python fixedint std::uint32 UInt32 std::uint16 UInt16 

Esto soporta cosas como el cambio de bits, etc.

 >>> a = fixedint.UInt32(14) >>> a UInt32(14) >>> a << 2 UInt32(56) 

Para interactuar con el hardware normalmente usamos la biblioteca estándar de struct , específicamente struct.pack y struct.unpack no solo se manejan anchos fijos sino también problemas de endianess. Consulte los manuales de la biblioteca python 2 o python 3 .