gpt4 book ai didi

使用 cython 将 double 转换为 char*

转载 作者:行者123 更新时间:2023-11-30 18:46:57 24 4
gpt4 key购买 nike

在 Cython 中,如何在不使用 Python 对象(例如 char *bytes )作为中间体的情况下转换生成 C double 的 C 字符串( str )表示形式?

事实上,我已在 C 扩展文件 (.pyx) 中定义了我的函数,如下所示:

cdef void function(self, char* var1) nogil:

cdef char* chaine =""
cdef double inter = 0.0
#Here there is some treatment which modifies the value of the local variable 'inter' so that it contains a double value different from 0
strcat(chaine , "(")
strcat(chaine , <char*>inter)
strcat(chaine , ")**beta")

strcpy(&var1, chaine)

编译文件后,出现错误 C2440 : impossible de convertir de 'double' en 'char*'C2168 : strcat nombre de paramètres de fonction intrinséque insuffisant

请问如何解决这个问题?

最佳答案

撇开是否值得在 python 或 C 级别执行此操作的问题不谈,看起来您的示例代码中存在一些 C 级别的严重误解。有很多内容,所以我只会给出一些建议来帮助引导您走向正确的方向;一旦您对 C 和 cython 感到更熟悉,请随时发布代码的更正版本作为答案。

首先,介绍一下指针。指针只是一个保存内存地址的变量。这个内存地址“指向”内存中的一些内容。这是一个简单的示例,可以解决这个问题:

cdef int a_number = 42#just a regular int, nothing special here :)
cdef int* a_pointer = &a_number#"referencing" to get the address of a_number
cdef int b_number = a_pointer[0]#"dereferencing" to get the value at a_pointer
#note the dereferencing syntax is different in cython than in C!!!

其次是函数如何工作。在 C 中,一切都是按值传递。这意味着每当您将参数传递给函数时,都会创建该参数的副本,并在此副本上进行操作。这包括指针;如果您尝试像在 function 中尝试那样设置 var1 指针,则实际的 var1 指针不会更改,并且只是作用域内的本地副本function 正在修改。显然不是我们想要的!

第三,我们需要了解字符串在 C 中的表示方式。字符串基本上是您关心的字符列表,后跟一个空终止符 \0。我确信您可以在线阅读很多有关 char*char[] 之间差异的资料,我强烈建议您看一下它们。我在这里只想说 char* 只是一个指针,因此它只指向第一个字符。 char* 也没有字符串长度的概念。

一旦您很好地掌握了所有这些概念,您就可以开始查看 Linux 手册页上的函数,例如 strcpystrcat 。我也会查找sprintf ,这有点类似于 python 的格式,并且可能比将一堆片段连接在一起更聪明。希望这对您的学习之旅有所帮助,祝您好运!

关于使用 cython 将 double 转换为 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49883145/

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