python - cffi:如何将字符串字符的地址发送到 C 函数?

标签 python cffi

我实际上正在编写一个带有 cffi 模块的 python 程序来测试我的 C/ASM 库,我设法让它工作。但我不知道如何访问字符串中间字符的地址以将其传递给我的 lib 函数。例如:

def my_bzero_test():
   str = b"hello world"
   print(str)
   lib.ft_bzero(str, 5)
   print(str)

打印:

b'hello world'

b'\x00\x00\x00\x00\x00 world'

但是我怎样才能测试像这样的东西:

def my_bzero_test():
   str = b"hello world"
   print(str)
   lib.ft_bzero(str + 5, 5) # C-style accessing &str[5]
   print(str)

我尝试了不同的东西,比如:

def my_bzero_test():
    str = ctypes.create_string_buffer(b"hello world")
    addr = ctypes.addressof(str)
    print(hex(addr))
    print(str)
    lib.ft_bzero(addr + 5, 5)
    print(str)

输出:

TypeError: initializer for ctype 'void *' must be a cdata pointer, not int

也尝试了 id(),但没有成功......

我对 python 不是很熟悉,但它似乎不是一个微不足道的应用,所以这里的帮助不胜感激,谢谢!

python 3.7.0

最佳答案

确定使用 ffi.new() 和 ffi.tostring() 找到了解决方案

str = ffi.new("char[]", b"hello world")
print(ffi.string(str))
lib.ft_bzero(str + 5, 5)
print(ffi.string(str))

输出:

b'hello world'

b'hello'

关于python - cffi:如何将字符串字符的地址发送到 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53140955/

相关文章:

python - Linux 上的 cffi 包安装错误

c - 我该如何用 cffi/lisp 包装 opencv 宏?

common-lisp - Common Lisp CFFI 和 C 退出代码

python - pandas 数据框的条件函数,if 与 else 更改值

OpenCV 的 Python 模块需要一个 Ubuntu 14.04 不可用的库

python - 将 secret (密码)存储在单独的文件中

common-lisp - cffi 函数调用挂起

lisp - 通过 CFFI 传递获取结果的指针

仅存储更改的 Python 字典

python - 为什么扩展切片分配不如常规切片分配灵活?