将字符串传递给c dll,在python中应为const unsigned char*

2024-09-30 20:35:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我很抱歉,但是我通常很难阅读ctypes文档。。。在

如果我有一个C函数,它接受一个const unsigned char*指针,并且我知道它既不会修改传入的字符串,也不会在函数调用之外保留对它的引用,那么直接传入一个指向python字符串字节的指针是很有意义的。在

我遵循2种方法

approach1:

cdll.func.restype=c_int
cdll.func.argtypes[c_int,c_int,c_int,c_char_p,c_int,c_char_p,c_int]
cdll.func(0,1,0,'11011101001111111000110011111',60,'0',80)

cdll function


 int func(inta,int b,int c, const unsigned char* cptr1 ,int ,const unsigned char* cptr2,int d){
       // do some string operation
       return 0;
    }

approach2:

v ='11011101001111111000110011111'
j = '0'
cdll.func(0,1,0,v,60,j,80)

  int func(inta,int b,int c, const unsigned char* cptr1 ,int ,const unsigned char* cptr2,int d){
       // do some string operation
       return 0;
    }

I done some research here link1

但这没用,真的用python做类型转换吗?但如果我这样做,它确实有效。提前谢谢


Tags: 字符串stringsomeoperationdointfunc指针
1条回答
网友
1楼 · 发布于 2024-09-30 20:35:50

以下是我从ctypes文档中得出的结论:

v = ctypes.create_string_buffer(b'11011101001111111000110011111')
j = ctypes.create_string_buffer(b'0')
cdll.func(0,1,0,v,60,j,80)

在python3中,ctypes函数create_string_buffer和{}没有被重命名/更改。所以create_string_buffer确实创建了一个字节缓冲区。在

试图传递u_uchars:

^{pr2}$

相关问题 更多 >