从C ++代码返回的字符串用随机值

时间:2017-07-05 15:42:42

标签: python c++ cython

我尝试为某些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 ++可执行文件按预期工作。有谁知道这里出了什么问题?

0 个答案:

没有答案