小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《如何在 GO 中将“_Ctype_int”更改为“int”?》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!
问题内容我有一个切片需要从 _ctype_int 更改为 int。
fmt.printf("slice type: %t", slice) //returns slice type: []main._ctype_int
你知道简单的转换吗?谢谢!
这是在 c++ 中返回数组指针的代码
#include "camera.hxx"
#include <iostream>
camera::camera()
{
}
int* camera::retrievedatapointerperbuffer() {
const int size = 640 * 512;
static int cameradata[size];
for (int i = 0; i < size; i++) {
cameradata[i] = i;
} //generates dummy 512x640 camera data
int* psrc = cameradata;
return psrc;
} //c++ file
这段代码调用了go中的c++函数。
func myCamera() {
cam := camera.NewCamera()
pSrc := cam.RetrieveDataPointerPerBuffer()
arraySize := 512 * 640
slice := (*[1 << 30]C.int)(unsafe.Pointer(pSrc))[:arraySize:arraySize]
fmt.Printf("\nSlice Type: %T\n", slice)
}
func main() {
go myCamera()
time.Sleep(15 * time.Millisecond)
}
我正在使用 swig 来包装 go 的 c++
解决方案
c int
和 go int
的大小取决于实现,并且它们不一定相同。
例如,要在不同的内存布局之间进行转换,
package main
import (
"fmt"
"unsafe"
)
import "c"
func main() {
cints := []c.int{0, 1, 2}
fmt.println(c.sizeof_int, cints)
goints := make([]int, len(cints))
for i, ci := range cints {
goints[i] = int(ci)
}
fmt.println(unsafe.sizeof(int(0)), goints)
}
输出:
4 [0 1 2]
8 [0 1 2]
$ go version
go version devel +0349f29a55 Thu Feb 21 15:14:45 2019 +0000 linux/amd64
$ gcc --version
gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0
$ g++ --version
g++ (Ubuntu 8.2.0-7ubuntu1) 8.2.0
$
终于介绍完啦!小伙伴们,这篇关于《如何在 GO 中将“_Ctype_int”更改为“int”?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!