上面的是ctype类型,与标准c类型,python封装类型
ctypes的类型都是由python封装,即第三列,所以基本的组成只有string,bytes,int,float,bool
各种构造
首先构造函数接受任何真值表达式,这些类都有对应的默认可选参数,即默认初始值。
因为ctypes中的类型是由python封装,所以还是遵循python语言的特性,那就是创建之后基本类型就不可变了。但是
ctypes里面都是封装后的容器,所以常用基本类型可变,但是对于指针来说,对于这个赋值,其实已经改变了指针指向的位置。那么就违背了数组,指针的本意。
这里的t是使用下面代码编译出来的so,并且加载修改。
extern "C"
void show(char * str)
{
*str = 'b';
}
因为bytes类型是不可变的,所以最好是传入可变,虽然这里可以修改,但是不推荐,所以我们使用 create_string_buffer()
和 create_unicode_buffer()前者是ascii,后者是unicode。我们可以通过raw进行查看。
下面的是linux
下面的是windows
扫描二维码关注公众号,回复:
6044130 查看本文章
可以看到windows的unicode是2个字节,linux是4个字节。而且只有string类型有raw,unicode没有。