create_string_buffer/Ctypes传参缓冲区地址/数组

在Python中,由于string是不可变的,无法直接传递给C/C++函数修改内容。ctypes的create_string_buffer提供了一种创建可变内存块的方法,用于与C函数交互。该内存块可以通过属性读写,并且可以作为C语言中的字符数组。在使用示例中,create_string_buffer被用来创建一个可修改的缓冲区,作为参数传递给C动态库的函数,以便接收函数执行后的返回内容。
摘要由CSDN通过智能技术生成

create_string_buffer

Python的string是不可修改的,所以不能传递string到一个 C/C++函数去改变它的内容,所以需要使用create_string_buffer

再python里通过ctypes给指针类型的对象c_char_p,c_wchar_pc_void_p 等赋值时,将改变它们所指向的内存地址,这和c/c++大不相同,c/c++是修改它们所指向的内存区域的内容,这是因为python的byte对象是不可以修改的.如果你需要可改变的内存块,ctypes提供了 create_string_buffer()函数,它提供多种方式创建这种内存块.当前的内存块内容可以通过raw属性存取,如果你希望将它作为NUL结束的字符串,请使用value属性

>>> from ctypes import *
>>> p = create_string_buffer(3)            # create a 3 byte buffer, initialized to NUL bytes
>>> print(sizeof(p), repr(p.raw))
3 b'\x00\x00\x00'
>>> p = create_string_buffer(b"Hello")     # create a buffer containing a NUL terminated string
>>> print(sizeof(p), repr(p.raw))
6 b&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值