如何从原始(字节)ctype缓冲区构建python字符串?
我正在玩Python和ctypes,但遇到了一个问题,搞不清楚怎么解决。我调用了一个C语言的函数,它会填充一些原始的二进制数据。我的代码是这样的:
class Client():
def __init__(self):
self.__BUFSIZE = 1024*1024
self.__buf = ctypes.create_string_buffer(self.__BUFSIZE)
self.client = ctypes.cdll.LoadLibrary(r"I:\bin\client.dll")
def do_something(self):
len_written = self.client.fill_raw_buffer(self.__buf, self.__BUFSIZE)
my_string = repr(self.__buf.value)
print my_string
问题是我收到的二进制数据中有0x00这个字节,而当我尝试构建my_string的时候,这些数据被截断了。如果self._buf里面包含了0x00,我该怎么构建my_string呢?
欢迎任何建议。谢谢!
1 个回答
8
你可以通过使用 create_string_buffer()
返回的缓冲区的 raw
属性,将其当作 Python 字符串来访问:
a = ctypes.create_string_buffer(10)
a.raw
# '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
如果你只想访问前 n
个字节,可以使用:
a.raw[:n]