gpt4 book ai didi

Python - 将字符传递给 C 库

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:29 25 4
gpt4 key购买 nike

我在 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 之间不会发生变化,printf 紧跟在调用之后。没有线程访问此函数,也没有静态变量。

最佳答案

您的问题出在 python 代码中,您传递的是字符串而不是字符,单引号和双引号在 python 中的工作方式几乎完全相同,而 -124 我想也许会出现从 python 解释器内部做的事情,试试这个

PostCommand( pObject, ord('1'), sz, 20, 1 )

很可能发生的情况是,解释器处理的参数存储为 c 字符串,它是 nul 终止的非 nul 字节序列,因此几乎肯定会使用指针,因此 -124 必须是指针的地址,这当然需要不止一个字节来表示。

关于Python - 将字符传递给 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com