使用PyMemberDef
声明中的T_STRING
定义,在Python C扩展中为基类型为char *
的对象创建成员非常简单。在
为什么wchar_t *
似乎没有等价物?如果真的有,那是什么?在
例如
struct object
包含char *text
PyMemberDef
数组有{"text", T_STRING, offsetof(struct object, text), READONLY, "This is a normal character string."}
和类似的
struct object
包含wchar_t *wtext
PyMemberDef
数组有{"wtext", T_WSTRING, offsetof(struct object, wtext), READONLY, "This is a wide character string"}
我知道像PyUnicode_AsString()
之类的东西和它的相关方法可以用UTF-8对数据进行编码,将其存储在一个基本的字符串中,稍后再进行解码,但是这样做需要将泛型的getattr
和{
直接使用} type 定义为Unicode字符的存储单元。在
wchar_t
是不可移植的。相反,Python将^{根据平台的不同,} 中找到相关定义。在
Py_UNICODE
可以定义为wchar_t
(如果可用),也可以定义为无符号的short/integer/long,其宽度取决于Python的配置方式(UCS2与UCS4)以及使用的体系结构和C编译器。您可以在^{对于您的用例,您的对象可以有一个Unicode字符串的属性,使用
T_OBJECT
:可以在对象的初始值设定项中执行类型检查:
^{pr2}$如果需要迭代Unicode字符串中的低级字符,有一个宏返回
Py_UNICODE *
:相关问题 更多 >
编程相关推荐