返回顶部
首页 > 资讯 > 后端开发 > GO >CGO C# 字符串数组到 GO 切片
  • 795
分享到

CGO C# 字符串数组到 GO 切片

2024-04-05 00:04:32 795人浏览 独家记忆
摘要

本篇文章给大家分享《CGo C# 字符串数组到 GO 切片》,覆盖了golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识

本篇文章给大家分享《CGo C# 字符串数组到 GO 切片》,覆盖了golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我正在使用 cgo 从 go 代码编译 c 库。然后从 c# 调用库函数。

在此 go 代码中,我有一个需要 []string 输入的函数,例如: func stringarray(strings []string)

我还有另一个需要 []int 输入的函数,例如: func intarray(vals []int)

如果我查看生成的头文件,我可以看到上述函数的以下内容:

extern __declspec(dllexport) void intarray(goslice vals);
extern __declspec(dllexport) void stringarray(goslice strings);

通过创建以下结构,我可以从 c# 成功调用 intarray 函数:

internal struct goslice
{
    public intptr data;
    public long len, cap;
    public goslice(intptr data, long len, long cap)
    {
        this.data = data;
        this.len = len;
        this.cap = cap;
    }
}

然后像这样调用函数:

long[] data = { 1, 2, 3, 4, 5, 6 };
intptr data_ptr = marshal.allochglobal(buffer.bytelength(data));
marshal.copy(data, 0, data_ptr, data.length);
var nums = new goslice(data_ptr, data.length, data.length);
intarray(nums);
marshal.copy(nums.data, data, 0, data.length);

我还可以通过创建以下结构成功调用需要字符串输入的函数:

internal struct gostring
{
    public string msg;
    public long len;
    public gostring(string msg, long len)
    {
        this.msg = msg;
        this.len = len;
    }
}

然后像这样调用函数:

string inputString = "Test";
GoString goString = new GoString(inputString, inputString.Length);

StringInput(goString);

我努力实现的目标是将预期的 []string goslice 传递给 stringarray 函数。有什么建议么?我需要 goslice 包含字符串而不是整数。

我尝试过以各种方式将字符串传递到 goslice,而不是整数,这不适用于混合结果。我期望最终得到一个 []string goslice,它可以在从 c# 调用“cgo 编译”go 函数时使用。


正确答案


感谢 liams 的意见,我设法想出了以下解决方案。

导出的go函数:

65bdd3795052

自从我使用 go 1.20.1 版本以来,我实际上进行了更改:

tmpslice := (*[1 << 30]*c.char)(unsafe.pointer(argv))[:length:length]

致:

65bdd3795065

根据 cgo wiki 的文档:https://GitHub.com/golang/go/wiki/cgo#turning-c-arrays-into-go-slices

c# 平台调用 (p/invoke):

65bdd3795069

c# 库调用:

65bdd379506d

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持编程网!更多关于Golang的相关知识,也可关注编程网公众号。

您可能感兴趣的文档:

--结束END--

本文标题: CGO C# 字符串数组到 GO 切片

本文链接: https://www.lsjlt.com/news/596262.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • CGO C# 字符串数组到 GO 切片
    本篇文章给大家分享《CGO C# 字符串数组到 GO 切片》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识...
    99+
    2024-04-05
  • python 字符串切片
    切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分)。我们使用一对方括号、起始偏移量start、终止偏移量end 以及可选的步长step 来定义一个分片。 格式: [start:end:step] [:] 提取从开...
    99+
    2023-01-31
    切片 字符串 python
  • shell中怎么切分字符串到数组
    这期内容当中小编将会给大家带来有关shell中怎么切分字符串到数组,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。解决方法1:#!/bin/=’,,,,=${ element  ...
    99+
    2023-06-04
  • 深度剖析Golang中的数组,字符串和切片
    目录1. 数组1.1 定义数组1.2 访问数组1.3 修改数组1.4 数组长度1.5 遍历数组1.6 多维数组2. 切片2.1 定义切片2.2 访问切片元素2.3 修改切片元素2.4...
    99+
    2023-05-17
    Golang数组 字符串 切片 Golang 数组 Golang 字符串 Golang 切片
  • C语言字符串替换:字符,字符串,字符数组详解
    目录案例描述案例分析必备知识1,字符数组(1)字符数组的定义(2)字符数组的初始化2,字符串概念(1)字符串的概念(2)用字符初始化字符数组(3)获取字符串的长度3,字符串与指针4,...
    99+
    2024-04-02
  • C语言字符串替换:字符,字符串,字符数组详解
    在C语言中,字符串是由字符数组表示的。一个字符串是一个以null字符('\0')结尾的字符数组。字符替换:要替换字符串中的某个字符,...
    99+
    2023-08-15
    C语言
  • Python中字符串切片详解
    目录1.没有步长的简单切片2.有步长的切片方式在python中,我们定义好一个字符串,如下所示。 在python中定义个字符串然后把它赋值给一个变量。我们可以通过下标访问单个的字符...
    99+
    2024-04-02
  • Python中字符串如何切片
    这期内容当中小编将会给大家带来有关Python中字符串如何切片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python...
    99+
    2023-06-14
  • 按分隔符展开切片字符串
    Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《按分隔符展开切片字符串》带大家来了解一下##content_title##,希望对大家...
    99+
    2024-04-04
  • mysql 解析json字符串、数组字符串、json数组字符串
    背景: 笔者使用mysql 5.7进行了一次json字符串的解析,因为一直在搞大数据相关的数据库、olap等,太久没有用mysql5.x的版本,一些函数已经不知道支不支持,我的同事建议我使用like、rlike模糊匹配的方式,身为数据人我不...
    99+
    2023-08-17
    mysql json 数据库
  • c语言中字符串与字符串数组详解
    目录字符串字符串输出输入字符串字符串常用方法字符串数组总结字符串 用双引号引起来的就是字符串,字符串由字符组成 字符串使用%s格式化输出 字符串以\0结尾,...
    99+
    2024-04-02
  • 详解Go语言如何实现字符串切片反转函数
    目录Python 中的 reverse 函数实现一个 reverse 反转函数利用两个切片实现前后两两原地交换反转为原切片的副本总结Python 中的 reverse 函数 Go 语...
    99+
    2024-04-02
  • Python字符串的索引与切片
    目录1、字符串的索引与获取2、字符串的 find 与 index 函数1、字符串的索引与获取 字符串的索引方式与列表的索引方式是一样的。只不过列表是每个元素的自身就有一个索引位置,而...
    99+
    2024-04-02
  • python字符串切片怎么使用
    在Python中,可以使用切片(slice)来获取一个字符串的子串。切片的基本语法是:`[起始索引:结束索引:步长]`。 起始索引...
    99+
    2023-10-26
    python
  • ios开发将字符串切割成数组
    在iOS开发中,可以使用NSString的componentsSeparatedByString方法将字符串切割成数组。这个方法的参...
    99+
    2023-09-12
    ios
  • 探索Python字符串切片之旅:从初学到专家
    从入门到精通:探索Python字符串切片的奇妙世界 Python是一门功能强大且易于学习的编程语言。其中一个强大的特性就是字符串切片。通过切片,我们可以轻松地在字符串中截取需要的部分,并进行各种操作。本文将引导你从入门到精通,探...
    99+
    2024-02-03
    python 入门 字符串切片
  • C语言字符串数组详解
    C语言字符串数组 字符串是连续的字符序列,最后以空字符'\0'作为终止符。一个字符串的长度指所有字符的数量,但不包括终止符。在 C 语言中,没有字符串类型,自然也就没有运算符以字符串...
    99+
    2024-04-02
  • Python 中的反转字符串reversed(),切片
    目录一、使用核心 Python 工具反转字符串二、通过切片反转字符串三、使用.join()和反转字符串reversed()四、手动生成反转字符串五、反转循环中的字符串六、用递归反转字...
    99+
    2024-04-02
  • python怎么赋值字符串的切片
    要将字符串的切片赋值给一个新的变量,可以使用以下语法: new_string = old_string[start:end] 其中,...
    99+
    2023-10-26
    python
  • 访问切片中包含的字符串
    php小编小新在这里为大家介绍如何访问切片中包含的字符串。在php中,切片是指从一个字符串中截取一部分字符的操作。通过访问切片中的字符串,我们可以获取所需的数据或者进行其他操作。在使用...
    99+
    2024-02-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作