2017-02-08 128 views
3

我需要在python中构建一个字符串并将其传递给包装的C库。的C LIB定义功能:Cython将字符串传递给C作为字节

unsigned char load(char const *FileName) 

在.pyx文件:

def test(): 
    PATH = '/usr/lib/libnx.so' 
    PATH = <char*>PATH 
    load(PATH) 

,但我得到:TypeError: expected bytes, str found

我已经试过编码Python字符串,但得到了同样的错误。

+0

.encode()应该解决这个问题 –

回答

3

在Python中,str对象不是像C中那样的字节数组。为了得到它,必须对字符串进行编码。默认值是UTF-8编码,它与ASCII向后兼容。

下面是通过字节数组两种方式:

  • 选项1:定义PATH是从一个bytes对象得到去:
    • PATH = b'/usr/lib/libnx.so',或:
    • PATH = 'usr/lib/libnx.so'.encode()
  • 选项2:将PATH编码成字节arr唉,当你通过它:
    • load(PATH.encode())
+0

这就是它看起来像,但我得到了同样的错误。 – BAR

+0

在'PATH.encode()'行 – BAR

+0

是的,但是错误行改变为'load(PATH)' – BAR