You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cython中使用__int128_t实现128位整数异或函数

解决Cython中128位整数异或函数的编译错误

问题背景

原本Python中的异或函数接收128位整数:

def xor(block: int, key: int) -> int:
    return block ^ key

尝试用Cython实现时编写了如下代码,但编译出错:

原Cython代码(.pyx文件)

import cython

cdef extern from *:
    ctypedef int int128 "__int128_t"

cpdef int128 xor(int128 block, int128 key):
    return block ^ key

原setup.py文件

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize('C_code.pyx', language_level="3"))

错误原因

  1. 类型兼容性问题:__int128_t是GCC/Clang的专属扩展类型,Python本身无法直接识别该类型,直接将其作为cpdef函数的参数或返回值,Cython无法生成Python可调用的接口。
  2. 类型声明错误:原代码中ctypedef int int128 "__int128_t"的写法有误,会导致类型别名定义混乱。

解决方法

1. 修正Cython代码

调整函数接口为Python原生int类型,内部用__int128_t处理运算,利用Python任意精度整数的特性完成类型转换:

import cython

# 正确声明GCC/Clang支持的128位整数类型
cdef extern from *:
    ctypedef signed __int128 __int128_t

# 对外暴露Python int接口,内部用__int128_t执行异或
cpdef int xor_int128(int block, int key):
    cdef __int128_t c_block = block
    cdef __int128_t c_key = key
    # 将运算结果转换回Python int返回
    return int(c_block ^ c_key)

2. 确保编译器支持__int128_t

  • __int128_t仅支持GCC、Clang等编译器,MSVC不支持该类型。如果是Windows环境,需使用MinGW或WSL编译。
  • 编译时无需额外修改setup.py,保持原配置即可。

3. 编译验证

执行编译命令:

python setup.py build_ext --inplace

编译成功后,即可在Python中导入并调用xor_int128函数,效果与原Python函数一致,但性能更优。

内容的提问来源于stack exchange,提问作者Geaden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:17:17