尝试回答其解决方案涉及IP地址和网络掩码的其他帖子,我陷入了简单的按位算法。
在Python中,是否有一种标准方法可以进行按位AND,OR,XOR,NOT操作,假设输入为“32位”(可能为负)整数或长整数,并且结果必须为long范围[0,2 ** 32]?
换句话说,我需要一个有效的Python对应于无符号长整数之间的C位运算。
编辑:具体问题是:
>>> m = 0xFFFFFF00 # netmask 255.255.255.0
>>> ~m
-4294967041L # wtf?! I want 255
答案 0 :(得分:51)
您可以使用ctypes及其c_uint32
:
>>> import ctypes
>>> m = 0xFFFFFF00
>>> ctypes.c_uint32(~m).value
255L
所以我在这里做的是将~m
转换为C 32位无符号整数并以Python格式检索其值。
答案 1 :(得分:38)
您可以按0xFFFFFFFF
屏蔽所有内容:
>>> m = 0xFFFFFF00
>>> allf = 0xFFFFFFFF
>>> ~m & allf
255L
答案 2 :(得分:10)
from numpy import uint32
答案 3 :(得分:1)
答案 4 :(得分:0)
您还可以使用0xFFFFFFFF xor,这相当于“unsigned complement”。
>>> 0xFFFFFF00 ^ 0xFFFFFFFF
255