概述
c_char_p为零终止,表示来自C的char *数组在第一个零值处终止.
POINTER(c_char)是导入可以具有0值的二进制数据的推荐方法,但似乎没有办法直接将其转换为python字符串.
我可以做这个:
pixels = clibblah.get_pixels() a = "" for i in range(0,clibblah.get_pixel_length()): a += pixels[i]
…但是这1)似乎并不是非常pythony,并且2)永远需要(在我的mac上转换640×480像素数据块大约需要2秒).
我已经在堆栈溢出时看到了很多关于此问题的问题,但是如果我能看到一个不是“人们为什么需要这样做?或者“c_char_p会做你想要的”(它没有,正如我上面所描述的那样).
我见过的唯一可信的建议是使用c api PyString_FromStringAndSize,如下所示:
http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/FAQ.html
不能真正看到它有多大帮助,因为afaik是一个cython功能,而不是python功能.
对于感兴趣的人,我需要这样做的原因是我正在使用panda3d和kinect,而kinect c api提供了一组unsigned char *值,panda3d api提供了一个setPixels()调用,只需要一个python字符串作为参数.
clibblah = ctypes.cdll.LoadLibrary('clibblah.dylib') get_pixels = clibblah.get_pixels get_pixels.restype = ctypes.POINTER(ctypes.c_char) pixels = get_pixels() num_pixels = clibblah.get_pixel_length() # Slice the ctypes array into a Python string a = pixels[:num_pixels]
总结
以上是编程之家为你收集整理的如何将具有0值字节的char *转换为python字符串?全部内容,希望文章能够帮你解决如何将具有0值字节的char *转换为python字符串?所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧