代码之家  ›  专栏  ›  技术社区  ›  Federico A. Ramponi

Python:无符号32位按位算术

  •  29
  • Federico A. Ramponi  · 技术社区  · 16 年前

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

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

    编辑:具体问题如下:

    >>> m = 0xFFFFFF00   # netmask 255.255.255.0
    >>> ~m
    -4294967041L         # wtf?! I want 255
    
    5 回复  |  直到 16 年前
        1
  •  57
  •   Dzinx    16 年前

    你可以用 ctypes c_uint32 :

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

    ~m 转换为C 32位无符号整数,并以Python格式检索其值。

        2
  •  46
  •   John Millikin    16 年前

    你可以用微笑来掩饰一切 0xFFFFFFFF :

    >>> m = 0xFFFFFF00
    >>> allf = 0xFFFFFFFF
    >>> ~m & allf
    255L
    
        3
  •  11
  •   pixelbeat    16 年前
    from numpy import uint32
    
        4
  •  3
  •   Maarten    9 年前

    还可以使用0xFFFFFF进行异或运算,这相当于“无符号补码”。

    >>> 0xFFFFFF00 ^ 0xFFFFFFFF
    255
    
        5
  •  1
  •   tzot    16 年前

    IPv4Utils

    它至少提供了一个 CIDR 使用子网算法初始化。检查模块末尾的测试用例以获取示例。