当前位置: 首页 > 面试题库 >

将cgo数组转换为切片

公羊宇定
2023-03-14
问题内容

目前,我这样做是为了将CGO的double数组转换为float64的一部分:

doubleSlc := [6]C.double{}

// Fill doubleSlc

floatSlc := []float64{float64(doubleSlc[0]), float64(doubleSlc[1]), float64(doubleSlc[2]),
                      float64(doubleSlc[3]), float64(doubleSlc[4]), float64(doubleSlc[5])}

是否有一种不太麻烦的方式来做相同的事情?我想这也可以看作是Go中不同类型的切片/数组之间进行转换的一种通用方法。


问题答案:

您具有执行此操作的正常和安全的方法:

c := [6]C.double{ 1, 2, 3, 4, 5, 6 }
fs := make([]float64, len(c))
for i := range c {
        fs[i] = float64(c[i])
}

或者,您可以不方便地作弊并执行以下操作:

c := [6]C.double{ 1, 2, 3, 4, 5, 6 }
cfa := (*[6]float64)(unsafe.Pointer(&c))
cfs := cfa[:]

如果C.doublefloat64是相同的基础类型,我们可以使用指向C.double数组的指针,不安全地将其强制转换为相同大小的float64数组的指针,然后获取该数组的一部分。

当然,调用它unsafe是有充分理由的。



 类似资料:
  • 问题内容: 这似乎是这将是整个interwebs一个相当普遍的事情,丰富的实例,但我似乎无法找到如何将一个转换的例子来。 我有一个从外部lib调用的函数,该函数返回一个数组 然后,我需要将该结果传递给其他函数以进行进一步处理。 不幸的是,如果我尝试致电 我懂了 在做 好多了。我该怎么做,尤其是在不创建数据副本的情况下(当我正在做的事情是传递数据时,似乎很愚蠢地复制该数据)。 问题答案: 这应该工作

  • 问题内容: 我是Go的新手,正在尝试编写一个读取RPM文件的应用程序。每个块的开头都有的魔术字符。 这是我的结构 我正在尝试执行以下操作: 我在网上搜索,不确定如何从切片到数组(不进行复制)。我总是可以制作魔术(甚至是),但我对如何从类型转换为更好奇? 问题答案: 内置方法 copy 只会将一个切片复制到一个切片,而不是将切片复制到一个数组。 您必须欺骗 复制 以将数组视为切片 或使用for循环进

  • 问题内容: 我正在尝试在Go代码中实例化C结构。该结构的定义如下(在我无法修改的外部库中): 在执行过程中,我这样做: 但是它不能编译,因为: 字段值中不能使用cStr(类型* C.char)作为类型[256] C.char 我试过强制([256] C.char)(cStr),但显然也不起作用。 有没有办法实现我想做的事情? 问题答案: 最简单的解决方案是将结构的字段定义更改为char-point

  • 问题内容: 我有一个包含几个整数的数组。我已经向数组添加了一些值,但是现在我需要通过jQuery的方法将此数组发送到页面。如何将其转换为JSON对象进行发送? 问题答案: 向后兼容的脚本:https : //github.com/douglascrockford/JSON- js/blob/master/json2.js 并致电: 注意: JSON对象现在是大多数现代Web浏览器(IE 8及更高版

  • 问题内容: 如何将数组转换为CSV文件? 这是我的数组: 问题答案: 我正在使用以下功能;它是对fputscsv注释中的man条目之一的改编。而且您可能想要展平该数组;不知道如果您传递一个多维的行会发生什么。

  • 问题内容: 我正在尝试将Java中的Javascript数组转换为Java数组。我正在使用javax.script包。我在这里测试了此示例,但是无法识别类型“ NativeArray” 我如何才能识别NativeArray类型? 问题答案: 按照这个答案,看来最好的选择是编写一个JavaScript转换器函数,该函数使用Rhino的Java绑定功能将本机JavaScript数组转换为Java数组。