![](/img/trans.png)
[英]How to pass string parameters to C++ function using ctypes, python
[英]pass a path from python 2 and 3 to c++ using ctypes
我需要使用ctypes从Python传递路径到C ++库。 如果我将路径指定为
path = b"..\\xml_mapping_rule\\AixLib_Mapping_Rule.xml"
一切正常。 但是现在我必须创建这样的路径
path = os.path.join(rootPath, "\\AixLib_Mapping_Rule.xml")
它在Python 2上有效,但在Python 3上无效。如何将路径转换为字节数组(我相信这就是字符串前面的b的作用)?
我在SO上可以找到的最接近的问题是: 在Python中传递到Labview DLL的路径
尝试类似:
path = os.path.join(root_path, "AixLib_Mapping_Rule.xml")
return path.encode('utf-8') # or 'latin-1' or 'cp1252'
在python 2中,字符串是字节序列,但是在python 3中,字符串是unicode代码点序列。 “编码”字符串是将代码点转换为字节序列的过程。
您必须通过编码将Unicode字符串转换为字节字符串,例如以下之一:
path = path.encode('ascii')
path = bytes(path, 'ascii')
如果要使用正确的编码,请尝试sys.getfilesystemencoding()
,如下所示:
import ctypes
import os
import sys
libc = ctypes.CDLL('libc.so.6')
fs_enc = sys.getfilesystemencoding()
rootPath = "/tmp"
path = os.path.join(rootPath, "AixLib_Mapping_Rule.xml")
path = path.encode(fs_enc)
fd = libc.open(path, 0, 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.