Python 如何给 C 函数传 json 字符串?

2019-02-17 21:55:27 +08:00
 css3

调用的都是同一个 C 函数,python 用的 ctypes

// c 语言中调用是这样
Init("{\"a\":\"../../av\", \"b\":\"../../bv\"}")
#如果用 python 调用 init 函数时,应该传递啥样的 json 字符串?这样不行😂,提示 expected key string
Init('{"a": "../av", "b": "../bv"}')
2359 次点击
所在节点    Python
10 条回复
lynskylate
2019-02-17 22:08:47 +08:00
...你先确认下你 python 版本,c 默认接受是 char*的话,ctypes 传的参数必须是 bytes
xd314697475
2019-02-17 22:24:12 +08:00
你把 c 的函数接口类型确定了
Init ( char *x )

然后 python 里

s="{\"a\":\"../../av\", \"b\":\"../../bv\"}"

.Init ( s )
ysc3839
2019-02-17 23:33:45 +08:00
试试 Init('{"a": "../av", "b": "../bv"}'.encode())
如果可以的话把完整代码发上来吧。
css3
2019-02-18 09:27:32 +08:00
@xd314697475 这样肯定不行啊,语法都是错误,python 双引号中,不能再用双引号啊
css3
2019-02-18 09:28:27 +08:00
@xd314697475 忽略 4 楼我说的,这样是不行的,就是我主帖里边的报的错:expected key string
css3
2019-02-18 09:39:55 +08:00
@ysc3839 很棒,这样是可行的👍👍👍👍
ysc3839
2019-02-18 10:24:01 +08:00
@css3 忘记了,应该可以更简单,试试
Init(b'{"a": "../av", "b": "../bv"}')
css3
2019-02-18 11:21:09 +08:00
@ysc3839 👍👍👍👍👍👍👍👍👍👍👍👍也可以,多谢,顺便再问一下,假如 C 函数返回一个句柄,用 python 调用这个函数的时候,应该怎么拿这个句柄呢?
ysc3839
2019-02-18 20:41:25 +08:00
@css3 什么句柄?发代码看看?
css3
2019-02-19 19:54:59 +08:00
@ysc3839 摸索了下,搞定啦,多谢了😁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/535920

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX