试图回答其解决方案涉及IP地址和网络掩码的另一篇文章,我陷入了简单的按位运算.
在Python中是否有一种标准方法可以进行按位AND,OR,XOR,NOT操作,假设输入为"32位"(可能为负)整数或长整数,并且结果必须在范围内为长[ 0,2**32]?
换句话说,我需要一个有效的Python对应于无符号长整数之间的C位运算.
编辑:具体问题是:
>>> m = 0xFFFFFF00 # netmask 255.255.255.0 >>> ~m -4294967041L # wtf?! I want 255
DzinX.. 52
你可以使用ctypes及其c_uint32
:
>>> import ctypes >>> m = 0xFFFFFF00 >>> ctypes.c_uint32(~m).value 255L
所以我在这里做的是转换~m
为C 32位无符号整数并以Python格式检索其值.
你可以使用ctypes及其c_uint32
:
>>> import ctypes >>> m = 0xFFFFFF00 >>> ctypes.c_uint32(~m).value 255L
所以我在这里做的是转换~m
为C 32位无符号整数并以Python格式检索其值.
你可以掩盖一切0xFFFFFFFF
:
>>> m = 0xFFFFFF00 >>> allf = 0xFFFFFFFF >>> ~m & allf 255L
from numpy import uint32