如何在Cython中使用C库“_int128_t.h”

How to use the C library "_int128_t.h" in Cython

提问人:Simon 提问时间:5/18/2023 更新时间:5/18/2023 访问量:44

问:

在文件 .py 中,我使用以下函数:

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

传输到 128 位数字。

我想用在Cython中实现的功能替换它。但是我不知道如何在那里使用 128 位数字

我写了代码:

.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"))

但是,编译过程中会发生错误。

Cython Int128

评论

0赞 Marijn 5/18/2023
您究竟会遇到哪些错误?当我尝试您的代码(使用 Cython-0.29.34 和 x86_64-linux-gnu-gcc 11.3.0 作为 C 编译器)时,代码编译和运行没有问题。
0赞 Simon 5/19/2023
事实上,使用 gcc 编译器,可以编译文件,但是,在将此函数导入 file.py 并尝试向其传递 128 位数字后,发生错误:cpdef int128 xor(int128 block, int128 key): 溢出错误:int 太大,无法转换@Marijn

答: 暂无答案