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

6

我需要在Python中构建一个字符串,并将其传递给封装后的C库。C库定义了以下函数:

unsigned char load(char const *FileName)

在.pyx文件中:
def test():
    PATH = '/usr/lib/libnx.so'
    PATH = <char*>PATH
    load(PATH)

但我得到的是:TypeError: 期望字节,但发现的是字符串 我已经尝试对Python字符串进行编码,但仍然收到同样的错误。

.encode() 应该修复这个问题。 - Greg Schmit
1个回答

5
在Python中,`str`对象不像C语言中的字节数组。如果要得到字节数组,就需要对字符串进行编码。默认编码为UTF-8,向后兼容ASCII编码。
以下是传递字节数组的两种方法:
1. 选项1:从一开始将`PATH`定义为`bytes`对象:
- `PATH = b'/usr/lib/libnx.so'` - 或者:`PATH = 'usr/lib/libnx.so'.encode()`
2. 选项2:在传递时将`PATH`编码为字节数组:
- `load(PATH.encode())`

奇怪,我无法复制。你可能忘记重新构建了吗?我使用了 cpython 并导入了 stdlib::atoi(),它还需要一个 char const * 作为参数。当我传递一个 str 对象时,它失败了(就像你的一样),但是在使用 .encode() 后它可以工作。 - Greg Schmit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接