Cython将字符串传递给C作为字节

时间:2017-02-08 06:55:18

标签: python c cython

我需要在python中构建一个字符串并将其传递给包装的C lib。 C lib定义了函数:

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字符串进行编码但得到了同样的错误。

1 个答案:

答案 0 :(得分:4)

在Python中,str对象不是C中的字节数组。为此,您必须对字符串进行编码。默认值为UTF-8编码,后向兼容ASCII。

以下是传递字节数组的两种方法:

  • 选项1:从一开始就将PATH定义为bytes个对象:
    • PATH = b'/usr/lib/libnx.so'或:
    • PATH = 'usr/lib/libnx.so'.encode()
  • 选项2:传递时将PATH编码为字节数组:
    • load(PATH.encode())