什么是Python3的const char *

时间:2015-05-10 10:47:43

标签: python swig

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中使用此功能?

2 个答案:

答案 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]