linux上python传递字符串到c或c++时,出现格式错误
python传递字符串到c或c++时,出现格式错误:TypeError: bytes or integer address expected instead of str instance原因:因为编写的c或者c++中的编码并不是utf-8的,故当你在linux下调用该c或c++函数时就会出现类型不一致。当然,中文的编码时也应该变为utf8。注:windows编码方式默认是gbk和linux默认是
·
python传递字符串到c或c++时,出现格式错误:TypeError: bytes or integer address expected instead of str instance或者出现字符串传递不成功。
1、python有两种不同的字符串,一种存储文本,一种存储字节。对于文本python内部采用unicode存储,而字节字符串显示原始字节序列或者ASCII
2、python3,文本字符串类型(使用unicode数据存储)被命名为str,字节字符串类型命名为bytes。
一般情况下,实例化一个字符串会得到一个str对象,如果想得到bytes,那就在文本之前加上前缀b,或者encode一下。所以,str对象有一个encode方法,bytes对象有一个decode方法
#str和bytes之间的转换:
str->encode()->bytes
bytes->decode()->str
注:windows编码方式默认是gbk和linux默认是utf8
解决方案:
方法一:将传递的字符串后面加上.encode()
如,python下时转换为:"11.jpg".encode()
(pah:0)root@anhui-k55vd:python3
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> so=ctypes.cdll.LoadLibrary("./libcrachrecg.so")
>>> so.testGetImg(ctypes.c_char_p("./11.jpg"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bytes or integer address expected instead of str instance
>>> so.testGetImg(ctypes.c_char_p("11.jpg"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bytes or integer address expected instead of str instance
>>> so.testGetImg("11.jpg".encode())
0
>>>
方法二:将传递的字符串前面加上b,表示格式化为字节序,效果与方法一等同
>>> so.testGetImg(b"11.jpg")
0
>>>
运行正确。
更多推荐
已为社区贡献2条内容
所有评论(0)