【问题标题】:create_string_buffer how to get used sizecreate_string_buffer 如何获得使用的大小
【发布时间】:2012-06-20 09:10:13
【问题描述】:

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

buffer = create_string_buffer(1000)

例如在缓冲区中我有 3 个值和 997 个未使用 -> 如何获得 3 个?

【问题讨论】:

    标签: python ctypes string-length


    【解决方案1】:

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

    纯粹为了理论上的乐趣——如果你可以使用上述方法,我认为没有理由这样做——我会提到你也可以这样做buffer.raw.find("\x00")list(buffer).index("\x00")。但是,如果字符串没有正确地以 null 结尾,则这些失败。

    【讨论】:

      【解决方案2】:
      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'。

      【讨论】:

      • 为什么要自己写循环?
      • 这只是一个例子,我想你想对数据做更多的事情,当然你可以使用lazyr中提到的方法,或者你可以使用列表推导并调用len()。我用这个例子来展示它是如何工作的,这是最容易修改/使用和进一步研究的方法。
      【解决方案3】:

      你可以:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 2011-02-10
        相关资源
        最近更新 更多