create_string_buffer如何获取使用的大小

时间:2012-06-20 09:10:14

标签: python ctypes string-length

如何确定使用create_string_buffer创建的缓冲区的使用大小/长度?

buffer = create_string_buffer(1000)

e.g。在缓冲区中我有3个值,997个未使用 - >如何获得3?

3 个答案:

答案 0 :(得分:3)

你有什么理由不能做len(buffer.value)吗?

对于它的纯理论乐趣 - 如果你可以使用上述方法,我认为没有理由这样做 - 我会提到你也可以buffer.raw.find("\x00")list(buffer).index("\x00")。如果字符串未正确地以空值终止,则会失败。

答案 1 :(得分:0)

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-Strings以空值终止,因此循环遍历字符串,直到找到'\ x00'。

答案 2 :(得分:0)

你可以:

  1. 让填充缓冲区的函数返回使用的缓冲区数量。
  2. 查找缓冲区的终止条件,例如 nul
  3. 使用数据中从未使用的值初始化缓冲区,然后查找 终止数据。