将swift字符串传递给c函数char *

约翰

我正在尝试将字符串参数从 swift 函数包装器传递给采用 char* 的 C 函数。

这个交流功能

long swe_fixstar2_ut(char* star, double tjd_ut, long iflag, double* xx, char* serr);

参数 star 必须为返回的星星名称提供至少 41 个字符。如果找到一颗星,则返回其名称。此函数从 txt 文件中搜索星星名称。

当导入 Swift 函数时看起来像这样

swe_fixstar_ut(star: UnsafeMutablePointer<Int8>!, tjd_ut: Double, iflag: int32,
                xx: UnsafeMutablePointer<Double>!, serr: UnsafeMutablePointer<Int8>!)

我想实现这样的目标

public func sweFixStarsUT(star: String, tjdUT: Double, iFlag: Int32) {
      let xx: UnsafeMutablePointer = UnsafeMutablePointer<Double>.allocate(capacity:6)
      let serr:UnsafeMutablePointer = UnsafeMutablePointer<CChar>.allocate(capacity:256)
      swe_fixstar_ut(star, tjdUT, iFlag, xx, serr)
}

我环顾了几个类似的问题,但它并没有解决我的问题。

将 Swift 字符串数组转换为 C 字符串数组指针

如何将 Swift 字符串数组传递给采用 char ** 参数的 C 函数

实际上这个函数来自瑞士星历C库。这是链接,如果你们有兴趣看

https://www.astro.com/swisseph/swephprg.htm#_Toc505244846

面向对象

就我阅读的文档而言,该参数star用于输入和输出,因此您star的 Swift 函数应该是inout.

并且long被导入为Int,在苹果的64位平台中,它代表64位有符号整数类型,如果它真的是32位,你可能需要更新你的C代码的源文件。我认为它是Int.

所以,我会像这样编写桥接代码:

public func sweFixStarsUT(star: inout String, tjdUT: Double, iFlag: Int) {
    let starLen = max(star.utf8.count, 41)
    var starBuf: [CChar] = Array(repeating: 0, count: starLen+1)
    strcpy(&starBuf, star)
    var xx: [Double] = Array(repeating: 0.0, count: 6)
    var serr: [CChar] = Array(repeating: 0, count: 256)
    swe_fixstar2_ut(&starBuf, tjdUT, iFlag, &xx, &serr)
    star = String(cString: starBuf)
}

我更喜欢在将指针传递给 C 函数时使用数组,因为函数不保留指针供以后使用。使用数组,您无需担心取消分配。

您可以看到代码如何将输入转换star为 CChar 数组并将数组转换回字符串。

如果您发现此代码有问题,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将字符串传递给函数

来自分类Dev

将字符串直接传递给C中输入参数为char指针的函数的潜在问题是什么?

来自分类Dev

如何将char传递给需要字符串的函数

来自分类Dev

标记字符串以将char *传递给execve()

来自分类Dev

如何将Swift字符串传递给ac函数?

来自分类Dev

将字符串地址作为参数传递给指针,指针传递给char函数

来自分类Dev

将字符串传递给javascript函数

来自分类Dev

将字符串数组传递给C中的函数

来自分类Dev

C结构;克服将字符串传递给char

来自分类Dev

如何将Swift字符串数组传递给带有char **参数的C函数

来自分类Dev

将C ++字符串传递给ac#函数

来自分类Dev

执行malloc后将字符串传递给函数

来自分类Dev

将字符串矩阵传递给修改它的函数

来自分类Dev

如何将字符串传递给宏函数

来自分类Dev

C#WPF将UTF16字符串传递给接受char *的函数

来自分类Dev

将字符串文字传递给模板函数

来自分类Dev

为什么将C字符串作为char *传递给函数会导致运行时错误(但将定义为char []的C字符串传递是可以的)?

来自分类Dev

将HTML字符串传递给JavaScript函数

来自分类Dev

将字符串传递给ggplot函数

来自分类Dev

将字符串传递给函数

来自分类Dev

将字符串传递给函数

来自分类Dev

将字符串直接传递给C中输入参数为char指针的函数的潜在问题是什么?

来自分类Dev

C ++将字符串数组传递给函数

来自分类Dev

将字符串传递给接受char指针的函数

来自分类Dev

将指针(字符串)传递给C函数

来自分类Dev

使用DLL将C#StringBuilder /字符串传递给C ++ char *

来自分类Dev

C 将字符串传递给函数问题

来自分类Dev

将字符串向量传递给函数和函数原型问题 C++

来自分类Dev

可以将字符串文字传递给采用 const char* 的函数吗?

Related 相关文章

  1. 1

    无法将字符串传递给函数

  2. 2

    将字符串直接传递给C中输入参数为char指针的函数的潜在问题是什么?

  3. 3

    如何将char传递给需要字符串的函数

  4. 4

    标记字符串以将char *传递给execve()

  5. 5

    如何将Swift字符串传递给ac函数?

  6. 6

    将字符串地址作为参数传递给指针,指针传递给char函数

  7. 7

    将字符串传递给javascript函数

  8. 8

    将字符串数组传递给C中的函数

  9. 9

    C结构;克服将字符串传递给char

  10. 10

    如何将Swift字符串数组传递给带有char **参数的C函数

  11. 11

    将C ++字符串传递给ac#函数

  12. 12

    执行malloc后将字符串传递给函数

  13. 13

    将字符串矩阵传递给修改它的函数

  14. 14

    如何将字符串传递给宏函数

  15. 15

    C#WPF将UTF16字符串传递给接受char *的函数

  16. 16

    将字符串文字传递给模板函数

  17. 17

    为什么将C字符串作为char *传递给函数会导致运行时错误(但将定义为char []的C字符串传递是可以的)?

  18. 18

    将HTML字符串传递给JavaScript函数

  19. 19

    将字符串传递给ggplot函数

  20. 20

    将字符串传递给函数

  21. 21

    将字符串传递给函数

  22. 22

    将字符串直接传递给C中输入参数为char指针的函数的潜在问题是什么?

  23. 23

    C ++将字符串数组传递给函数

  24. 24

    将字符串传递给接受char指针的函数

  25. 25

    将指针(字符串)传递给C函数

  26. 26

    使用DLL将C#StringBuilder /字符串传递给C ++ char *

  27. 27

    C 将字符串传递给函数问题

  28. 28

    将字符串向量传递给函数和函数原型问题 C++

  29. 29

    可以将字符串文字传递给采用 const char* 的函数吗?

热门标签

归档