我尝试为某些C ++代码编写一个Cython包装器。当我编译并执行C ++文件时,输入字符串被正确转换。示例输出:
T*GRSLR*L
RKVDLCDSL
[...]
但是当我在Python中使用Cython包装器运行我的代码时,字符串被填充如下:
b'T*GRSLR*R\x8f\x96\x01'
b'RKVDLCDSR\x8f\x96\x01'
[...]
有时这只会发生在一个序列中,有时会发生在所有序列中。
我使用以下Cython代码与我的C ++代码进行交互:
# file: sixframe.pyx
from libcpp.string cimport string
from libcpp.vector cimport vector
cdef extern from "six_frame.cpp":
cdef void initCodonTable()
cdef vector[string] sixFrame(string seq)
def six_frame(bytes seq):
return sixFrame(seq)
initCodonTable()
我的C ++函数的签名是:
// file: six_frame.cpp
vector<string> sixFrame(string seq){
...
}
这个错误非常类似于我使用了错误的类型,并且未正确检测到字符串的结尾。我怀疑错误是在Cython代码中,因为C ++可执行文件按预期工作。有谁知道这里出了什么问题?