cffi: Как мне отправить адрес символа строки в функцию C?
На самом деле я пишу программу на python с модулем cffi для тестирования моей библиотеки C/ASM, и мне удалось заставить ее работать. Но я не знаю, как получить доступ к адресу символа в середине строки, чтобы передать его в мою функцию lib. Например:
def my_bzero_test():
str = b"hello world"
print(str)
lib.ft_bzero(str, 5)
print(str)
что печатает:
б'елло мир "
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: инициализатор для ctype 'void *' должен быть указателем cdata, а не int
также попытался с id(), но безуспешно...
Я не очень знаком с Python, но мне кажется, что это не тривиальное использование, поэтому небольшая помощь здесь будет оценена, спасибо!
Python 3.7.0
1 ответ
Хорошо нашел решение использовать 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"