在我编写的Linux上运行程序时遇到了麻烦。 由于它是一个相当大的程序,我不会发布整个代码,但只有让我困惑的部分。 我有一个用C ++编写并在Linux Ubuntu上编译的库,它做了一些工作并将一个传入的字符打印到控制台,如下所示:
O(log(n))
整个事情编译得很好,我的Python程序能够调用函数:
bool PostCommand( void* pParam, char c, char* szRet, int nLength, int nBlockTime )
{
printf("Got: %d", c);
//do some work
return true;
}
控制台输出看起来像
# -*- 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如何变成-124。 变量在它的创建和C ++函数或printf的调用之间不会被更改,紧跟在调用之后。 没有线程访问此函数,也没有静态变量。
答案 0 :(得分:1)
你的问题出现在python代码中,你传递的是字符串而不是字符,单引号和双引号在python中的工作方式几乎完全相同,-124
我认为可能是来自python的东西口译员在内部做,试试这个
PostCommand( pObject, ord('1'), sz, 20, 1 )
很可能发生的事情是,解释器处理的参数存储为ac字符串,这是一个nul
终止的非nul
字节序列,因此几乎肯定会使用指针,因此-124
必须是指针的地址,当然需要多于一个字节来表示。