【发布时间】:2012-06-20 09:10:13
【问题描述】:
如何确定使用 create_string_buffer 创建的缓冲区的使用大小/长度?
buffer = create_string_buffer(1000)
例如在缓冲区中我有 3 个值和 997 个未使用 -> 如何获得 3 个?
【问题讨论】:
标签: python ctypes string-length
如何确定使用 create_string_buffer 创建的缓冲区的使用大小/长度?
buffer = create_string_buffer(1000)
例如在缓冲区中我有 3 个值和 997 个未使用 -> 如何获得 3 个?
【问题讨论】:
标签: python ctypes string-length
你有什么理由不能只做len(buffer.value)?
纯粹为了理论上的乐趣——如果你可以使用上述方法,我认为没有理由这样做——我会提到你也可以这样做buffer.raw.find("\x00") 或list(buffer).index("\x00")。但是,如果字符串没有正确地以 null 结尾,则这些失败。
【讨论】:
In [1]: from ctypes import *
In [2]: s = create_string_buffer(1000)
In [3]: s[0] = '1'
In [4]: s[1] = '2'
In [5]: s[2] = '3'
In [6]: s
Out[6]: <ctypes.c_char_Array_1000 at 0x8ca126c>
In [7]: for i, c in enumerate(s):
...: if c == '\x00':
...: break
...:
In [8]: i
Out[8]: 3
C 字符串是以 null 结尾的,所以循环遍历字符串直到找到 '\x00'。
【讨论】:
你可以:
【讨论】: