gpt4 book ai didi

python - 如何在 python3 ctypes 中将 c_char_p 值作为字节获取?

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:32 24 4
gpt4 key购买 nike

我对 python3 中的 ctypes 有疑问。

我正在尝试获取一个 c_char_p 作为 python 字节对象。
以下代码试图将其值作为 python3 字节对象获取。

如何获取字节对象的值?

from ctypes import *

libc = cdll.LoadLibrary("libSystem.B.dylib")
s1 = create_string_buffer(b"abc") # create a null terminated string buffer
s2 = create_string_buffer(b"bc") # same at above


g = libc.strstr(s1, s2) # execute strstr (this function return character pointer)
print(g) # print the returned value as integer
matched_point = c_char_p(g) # cast to char_p
print(matched_point.value) # trying to getting value as bytes object (cause segmentation fault here)

最佳答案

我自己找到了问题的答案。

根据官方 Python ctypes 文档,调用的 C 函数默认返回整数。

所以在调用C函数之前,用restype属性指定返回值的类型。

正确的代码示例:

from ctypes import *

libc = cdll.LoadLibrary("libSystem.B.dylib")
s1 = create_string_buffer(b"abc") # create a null terminated string buffer
s2 = create_string_buffer(b"bc") # same at above


libc.strstr.restype = c_char_p # specify the type of return value

g = libc.strstr(s1, s2) # execute strstr (this function return character pointer)
print(g) # => b"bc" (g is bytes object.)

关于python - 如何在 python3 ctypes 中将 c_char_p 值作为字节获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41593872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com