Python:无符号32位算术运算

2024-05-13 20:13:12 发布

您现在位置:Python中文网/ 问答频道 /正文

为了回答另一篇关于IP地址和网络掩码的文章,我陷入了简单的按位运算的困境。

在Python中,是否有一种标准的方法来执行按位和(或)异或(或)运算,而不是假设输入是“32位”(可能是负)整数或长整数,并且结果必须是[0,2**32]范围内的长整数?

换句话说,我需要一个工作的Python对应于无符号long之间的C位操作。

编辑:具体问题是:

>>> m = 0xFFFFFF00   # netmask 255.255.255.0
>>> ~m
-4294967041L         # wtf?! I want 255

Tags: 方法网络编辑标准文章符号整数long
3条回答

您可以使用ctypes及其c_uint32

>>> import ctypes
>>> m = 0xFFFFFF00
>>> ctypes.c_uint32(~m).value
255L

所以我在这里做的是将~m强制转换为一个C 32位无符号整数,并以Python格式检索其值。

from numpy import uint32

您可以通过0xFFFFFFFF来屏蔽所有内容:

>>> m = 0xFFFFFF00
>>> allf = 0xFFFFFFFF
>>> ~m & allf
255L

相关问题 更多 >