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

时间:2018-11-04 12:46:05

标签: 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世界'

但是我该如何测试类似的东西:

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:ctype'void *'的初始化程序必须是cdata指针,而不是int

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

我对python不太熟悉,但是似乎它并不是一个琐碎的用法,所以这里的帮助很少,谢谢!

Python 3.7.0

1 个答案:

答案 0 :(得分: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'