Python - 将字符传递给 C 库
Python - Passing character to C library
我在我编写的Linux上运行程序时遇到了很大的麻烦。由于这是一个相当大的程序,我不会发布整个代码,而只会发布让我感到困惑的部分。我有一个库,用C++编写并在Linux Ubuntu上编译,它可以做一些工作并将传入字符打印到控制台,如下所示:
bool PostCommand( void* pParam, char c, char* szRet, int nLength, int nBlockTime )
{
printf("Got: %d", c);
//do some work
return true;
}
整个事情编译得很好,我的Python程序能够调用该函数:
# -*- coding: ascii -*-
from ctypes import cdll,c_char,create_string_buffer,...#don't want to list 'em all
m_DLL = cdll.LoadLibrary("./libaddonClient.so")
PostCommand = m_DLL.PostCommand
PostCommand.argtype = [c_void_p,c_char,c_char_p,c_int,c_int]
PostCommand.restype = c_bool
print ord('1')
sz = create_string_buffer(20);
#pObject was generated prior and works fine
PostCommand( pObject, '1', sz, 20, 1 )
控制台输出如下所示
49
Got: -124
我的问题是 49 如何变成 -124。变量在创建与调用 C++ 函数或 printf 之间不会更改,后者紧随调用之后。没有线程访问此函数,也没有静态变量。
你的问题出在 python 代码中,你传递的是字符串而不是字符,单引号和双引号在 python 中几乎完全相同,-124
我认为可能来自 python 解释器在内部做的事情,试试这个
PostCommand( pObject, ord('1'), sz, 20, 1 )
很可能发生的事情是,解释器处理的参数被存储为 c 字符串,这是一个nul
终止的非nul
字节序列,因此几乎肯定使用指针,因此-124
必须是指针的地址,当然需要的不仅仅是一个字节来表示。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Python中的反向无符号字符
- 如何使用 Swig 将无符号字符* 转换为 Python 列表
- 使用CTYPES将字符串从Python传递到C - 仅发送第一个字符
- swig c/python和未签名的字符指针
- 如何在 python 中将无符号字符类型的整数字符串转换为整数
- 使用 Boost.Python 使用无符号字符和参数公开方法
- python字符串使用特殊字符发送到c++dll,崩溃
- 在SWIG中将可变字符*传递给Python
- C++中的字符切片数组(python到c ++)
- BoostPython:在路径中加载带有unicode字符的Python模块
- Zeromq:如何从python客户端向c++服务器发送超过30个字符的消息
- Python ctypes字符指针和字符串长度问题
- C++:将 UTF16 字符的十六进制表示转换为十进制(如 python 的 int(hex_data, 16))
- Python/ c++ /Java:是否有一个库可以识别字符并告诉我它们在图像中的位置
- 在python中允许使用字符指针
- Python - 将字符传递给 C 库
- C++ wxsocket TCP 服务器发送无符号字符数组,但 python 客户端再获得 4 个字节