Python 3.x ctypes c_wchar_p return与官方文档示例不同

时间:2016-11-15 04:28:49

标签: python python-3.x ctypes

Python版

Python 3.5.2

问题

我发现c_wchar_pc_char_p返回结果的行为与基于ctypes doc的结果不同。来自Python 3.5的ctypes doc:

>>> c_wchar_p("Hello, World")
c_wchar_p('Hello, World')

它返回ctypes字符串。但是我在Python3.5控制台中执行相同cmd的结果:

>>> from ctypes import *
>>> c_wchar_p("Hello, World")
c_wchar_p(1374004842736)
>>> c_wchar_p("Hello, World")
c_wchar_p(1374004841680)
>>> c_wchar_p("Hello, World")
c_wchar_p(1374004842736)

所以看起来orignial字符串部分被内存地址替换。挖掘更多,并发现它是否是Python 2.x,然后返回显示像Python 3.5 ctypes doc所示的字符串。但是在Python 3.x中,它总是返回这些数字。在多台PC上查看,都看到了同样的事情。并且理解了我们可以使用.value返回原始字符串的部分。在create_string_buffer()和create_unicode_buffer()上观察到相同的事情。同时,对于其他数据类型,如c_int(),c_bool,c_void_p等,请不要看到这一点。

问题

  • 有人能解释一下这种ctypes的行为吗?
  • 有没有办法修复Python3.x的返回结果和doc写的一样?

提前多多感谢〜

0 个答案:

没有答案