我有一个Python包的C++对象,其基础数据是一个容器,{{CD1.}}表示比特。我有一个函数将这些位写入PyBytes对象。如果endianness是相同的,那么就没有问题了。但是,如果我希望以不同的尾数写入字节,那么我需要对每个字进行位交换(或字节交换)
理想情况下,我可以将一个输出迭代器传递给PyBytes_FromString
构造函数,其中输出操作符只转换每个单词的endianness。这将是O(1)
额外的内存,这是目标
不太理想的情况是,我可以以某种方式构造一个空的PyBytes对象,手动创建不同的endiannesschar
数组,并以某种方式将其分配给PyBytes对象(基本上是重新实现PyBytes constructors)。这也将是O(1)
额外的内存。不幸的是,实现这一点的方法是使用_PyBytes_FromSize
,但API中没有这种方法
当前的方法是创建反转单词的完整副本,然后将该表示复制到PyBytes对象表示
我认为第二种选择是实现这一点的最实际的方法,但我能看到工作的唯一方法是基本上将_PyBytes_FromSize
函数复制到我的源代码中,这看起来很粗糙。我是python-CAPI新手,不知道是否有更干净的方法来实现这一点
^{} 允许您将
NULL
作为第一个参数传递,在这种情况下,它返回一个未初始化的字节对象(您可以编辑)。它实际上相当于_PyBytes_FromSize
,可以让您进行第二个选择如果您想尝试“输出迭代器”选项,那么解决方案是调用
PyBytes_Type
:任何返回0到255之间的值的iterable都应该工作。您可以选择最容易使用的
PyObject_Call*
我怀疑用C/C++编写iterable比编写循环要麻烦得多
相关问题 更多 >
编程相关推荐