Tag: python

Python相当于Bit Twiddling Hacks的C代码?

我有点计数方法,我想尽快做。 我想尝试下面的Bit Twiddling Hacks算法,但我不知道C.什么是’type T’什么是py等价于(T)〜(T)0/3? 将最佳位计数方法推广到位宽高达128的整数(由类型T参数化)是这样的: v = v – ((v >> 1) & (T)~(T)0/3); // temp v = (v & (T)~(T)0/15*3) + ((v >> 2) & (T)~(T)0/15*3); // temp v = (v + (v >> 4)) & (T)~(T)0/255*15; // temp c = (T)(v * ((T)~(T)0/255)) >> (sizeof(v) – 1) * CHAR_BIT; // count

OSX中的python crypt

我有一个Django应用程序,它重置在Ubuntu机器上运行的unix用户密码,但我的开发环境是OS X,我遇到了这种烦人的情况: OS X: >>> import crypt >>> crypt.crypt(‘test’,’$1$VFvON1xK$’) ‘$1SoNol0Ye6Xk’ Linux的: >>> import crypt >>> crypt.crypt(‘test’,’$1$VFvON1xK$’) ‘$1$VFvON1xK$SboCDZGBieKF1ns2GBfY50’ 从阅读pydoc for crypt ,我看到它使用了特定于操作系统的crypt实现,因此我还在两个系统中测试了以下代码,结果与Python相同: #include int main() { char *des = crypt(“test”,”$1$VFvON1xK$ls4Zz4XTEuVI.1PnYm28.1″); puts(des); } 我怎样才能让OS X的crypt()实现生成与Linux crypt()相同的结果? 为什么不是Python实现所涵盖的(正如我期望从这种情况进行跨平台部署)?

Python C API如何将结构数组从C传递给Python

对于我正在创建的python模块,我想向python用户传递一个这样的结构数组: struct tcpstat { inet_prefix local; inet_prefix remote; int lport; int rport; int state; int rq, wq; int timer; int timeout; int retrs; unsigned ino; int probes; unsigned uid; int refcnt; unsigned long long sk; int rto, ato, qack, cwnd, ssthresh; }; 我认为Py_BuildValues是我正在寻找的function。 但似乎不是。 查看Python文档,我找到了缓冲协议 。 但这是我第一次开发python模块,官方文档对我没什么帮助。 缓冲协议是我问题的最佳解决方案吗? 如果是这样,我怎么能将我的数组从C返回到python?

使用Cython向另一个应用程序公开function

我有这个C ++代码,它显示了如何通过将软件编译为DLL并将其放在应用程序文件夹中来扩展软件: #include #include /** A helper function to convert a char array into a LPBYTE array. */ LPBYTE message(const char* message, long* pLen) { size_t length = strlen(message); LPBYTE mem = (LPBYTE) GlobalAlloc(GPTR, length + 1); for (unsigned int i = 0; i < length; i++) { mem[i] = message[i]; } *pLen = length […]

C到Python通过SWIG:无法获取void **参数来保存它们的值

我有一个看起来像这样的C接口(简化): extern bool Operation(void ** ppData); extern float GetFieldValue(void* pData); extern void Cleanup(p); 使用如下: void * p = NULL; float theAnswer = 0.0f; if (Operation(&p)) { theAnswer = GetFieldValue(p); Cleanup(p); } 您将注意到Operation()分配缓冲区p,GetFieldValue查询p,以及Cleanup释放p。 我对C接口没有任何控制权 – 该代码在其他地方被广泛使用。 我想通过SWIG从Python调用此代码,但我无法找到如何将指针传递给指针的任何好例子 – 并检索其值。 我认为正确的方法是使用类型映射,所以我定义了一个接口,它会在C端为我自动取消引用p: %typemap(in) void** { $1 = (void**)&($input); } 但是,我无法使用以下python代码: import test p = None theAnswer = 0.0f […]

是否可以使用python编译c代码?

我想构建一个python程序,它将.c文件的路径作为输入,然后编译它。 如果编译成功,程序将输出OK到屏幕,否则输出BAD。 我一直试图谷歌,但找不到任何东西。 我一直在尝试使用编译程序的参数在python中运行cmd,但它不起作用。 澄清 – 我已经在我的机器中有一个非常具体的编译器,我想运行它。 我不希望python充当编译器。 只需获取代码,在其上运行我的编译器,然后查看答案是什么。 它应该在使用python 2.4的Linux服务器上运行。 谢谢

如何使用Python优雅地发送/接收大型C结构?

我已经开始编写Python 3.x客户端应用程序了。 服务器应用程序已经存在并用C语言编写。服务器提供了一个C头文件,其中包含两个用于通过UDP发送和接收数据的结构的定义(我正在使用Python的socket模块)。 问题是C结构非常大(每个大约200个元素)。 如果我使用Python的struct模块来打包/解包数据,那么一个不那么优雅的解决方案就是手动打包/解包200个元素,如: struct.pack(‘H…I’, data1, …, data200) 此外,我希望能够使用类似C的语法访问Python中的接收/发送元素。 例如,如果我在C服务器端 send.data.pos = pos; 如果我可以像这样访问Python客户端中的pos变量,那将是很好的(最自然的): pos = recv.data.pos 请注意,问题不在于如何从头文件中自动编写Python结构,就像在这个线程中一样(我在Python中逐个编写每个结构字段没有问题),而是什么是最好的组织方式Python中的数据(例如在类中,使用字典等),这将允许我利用Pythonfunction并使代码更简单,数据易于访问(我宁愿只使用Python标准模块,也不使用外部软件)。 实现这一目标最优雅的方法是什么?

通过readinto()将二进制数据解析为ctypes结构对象

我正在尝试处理二进制格式,遵循以下示例: http://dabeaz.blogspot.jp/2009/08/python-binary-io-handling.html >>> from ctypes import * >>> class Point(Structure): >>> _fields_ = [ (‘x’,c_double), (‘y’,c_double), (‘z’,c_double) ] >>> >>> g = open(“foo”,”rb”) # point structure data >>> q = Point() >>> g.readinto(q) 24 >>> qx 2.0 我已经定义了我的标题的结构,我正在尝试将数据读入我的结构,但我遇到了一些困难。 我的结构是这样的: class BinaryHeader(BigEndianStructure): _fields_ = [ (“sequence_number_4bytes”, c_uint), (“ascii_text_32bytes”, c_char), (“timestamp_4bytes”, c_uint), (“more_funky_numbers_7bytes”, c_uint, 56), (“some_flags_1byte”, c_byte), […]

设置协调算法的实现

我正在寻找集合协调算法的实现。 问题在于:有两个集合,其中元素由位于不同机器上的一些相对紧凑的值(例如UUID或MD5 / SHA1 /任何散列)标识。 这些集合在相对较少的元素中有所不同,我希望在传输最少量的数据时同步这些集合。 大多数谷歌搜索引领这里 。 这是GPL实施的似乎是最先进的任务方法。 问题是我不能在我的应用程序中使用GPL代码。 我很可能必须使用像nzmath这样的东西重新实现它,但也许还有其他实现(最好是Python或C / C ++),或者还有其他更好的算法?

截面颜色平均矩形

我写了一个快速的python脚本来返回屏幕周边的矩形的平均颜色。 (这里的最终目标是在我的显示器周围放置RGB LED条 ,以便在电影期间获得发光效果 – 像这样(youtube) ,但更有趣,因为我自己制作它)。 我目前正在使用autopy将屏幕作为位图(“屏幕截图”),获取每个像素值以及RGB HEX转换。 简化版: step = 1 width = 5 height = 5 b = autopy.bitmap.capture_screen() for block in border_block(width, height): # for each rectangle around the perimeter of my screen R,G,B = 0,0,0 count = 0 for x in xrange(block.x_min, block.x_max, step): for y in xrange(block.y_min, block.y_max, step): […]