libreria - Python: aritmética bit a bit sin signo de 32 bits
python 3.6 math module (5)
Este es un módulo que creé hace mucho tiempo, y podría ser de ayuda para usted:
Proporciona al menos una clase CIDR
con aritmética de subred. Verifique los casos de prueba al final del módulo para ver ejemplos.
Al intentar responder a otra publicación cuya solución se refiere a direcciones IP y máscaras de red, me quedé atrapado en la aritmética de bit a bit.
¿Existe una forma estándar, en Python, de llevar a cabo las operaciones Y, O, XOR, NOT a nivel de bits, suponiendo que las entradas son enteros o longitudes "32 bit" (quizás negativas), y que el resultado debe ser largo en el rango [ 0, 2 ** 32]?
En otras palabras, necesito una contraparte de Python que trabaje para las operaciones en bit C entre longitudes sin firmar.
EDITAR: el problema específico es este:
>>> m = 0xFFFFFF00 # netmask 255.255.255.0
>>> ~m
-4294967041L # wtf?! I want 255
Puedes enmascarar todo por 0xFFFFFFFF
:
>>> m = 0xFFFFFF00
>>> allf = 0xFFFFFFFF
>>> ~m & allf
255L
Puedes usar ctypes y su c_uint32
:
>>> import ctypes
>>> m = 0xFFFFFF00
>>> ctypes.c_uint32(~m).value
255L
Entonces, lo que hice aquí fue convertir ~m
en un entero sin signo C de 32 bits y recuperar su valor en formato Python.
from numpy import uint32
También puede xor con 0xFFFFFFFF, que es equivalente al "complemento sin signo".
>>> 0xFFFFFF00 ^ 0xFFFFFFFF
255