【发布时间】:2018-09-28 05:57:06
【问题描述】:
在使用 Cython 封装 C 语言时,我尝试将 C 中的 void* 类型转换为 python 中的 string,但是在转换 C 语言时,我不知道如何将 void* 类型转换为 string int to python Py_ssize_t,like(类的一部分):
cpdef int peek_tail(self):
cdef int value = <Py_ssize_t>cqueue.queue_peek_tail(self._c_queue)
当我想将其转换为string时,我该如何定义它?
cpdef ? peek_tail(self):
cdef ? value = <?>cqueue.queue_peek_tail(self._c_queue)
? 是我想要的。有任何文件吗?
【问题讨论】:
-
“转换”是什么意思?
void *-pointer 是否指向 python 字符串并且您想将其 cast 到字符串对象?或者它可以是任何PyObject *并且您想将其转换为它的字符串表示形式? -
并且在问题中包含
cqueue(无论是什么)并不能增加清晰度 - 而是相反.. -
@ead 我假设
cqueue取自this tutorial。它不会改变一些未知类型已隐藏在void*后面的事实,并且应该以某种方式将其转换为字符串而不知道它是如何放在那里的...... -
@littlely 这里还有一件事要担心 - 如果您打算使用 C 字符串 (
char*),您可能需要考虑管理内存。如何做到这一点取决于 C 字符串的来源(字符串文字,在 C 中生成,例如sprintf,或从 Python 字符串转换而来)。不幸的是,没有明显正确的方法来做到这一点......