C中的函数如下:
char* test(const char* input, size_t length);
使用swig(3.0.2)导出到python扩展名。
在python2中,运行test("hello",len("hello"))
,该函数运行良好。
但是在python 3中,运行config="hello";test(config.encode("utf-8"),len(config.encode("utf-8")))
TypeError: in method 'test', argument 0 of type 'char const *'
如何在Python3中使用此功能?
答案 0 :(得分:0)
我找出了真正的原因。
在python 3中,我应该使用与python2中相同的东西。也就是说test("hello",len("hello"))
但是Python3 len(“你好”)不适合真正的UTF-8。
例如,
python2:
>>>len("测试")
4
python3:
>>>len("测试")
2
因此C函数的长度错误。
答案 1 :(得分:-1)
在C const char *
中是不可变 char *
(字符串)的类型。我不确定你为什么会收到这个错误 - 可能是因为你传递了一个 mutable 的Python字符串 - 你可以修改/重新分配它:
config = "hello"
config = config[:2]