zoukankan      html  css  js  c++  java
  • Go语言中调用C语言类型转换篇

    1.Cgo 数组转切片

    go数组转C数组 (*[3]int32)(unsafe.Pointer(backgroundColor))       

    // 切片转数组
    c := [6]C.double{ 1, 2, 3, 4, 5, 6 }
    cfa := (*[6]float64)(unsafe.Pointer(&c))
    cfs := cfa[:]
    
    // 数组转切片
    top := [2]C.float{0.05, 0.15} //cgo #切片转数组
    
    // go数组转C数组 unsafe.Pointer(&u8[0])
    status := C.WXImage_FromEncodedData((*C.uint8_t)(unsafe.Pointer(&u8[0])), C.ulong(len(u8)), &image.pa)
    
    //C数组转go切片
    hPose := (*[3]float32)(unsafe.Pointer(headPose)) // 头部角度,长度为3,依次分别代表三个方向: yaw(左右摇头), pitch(上下点头), roll(左右摆头,头部歪向两侧肩膀)
    hposeValue := hPose[:]
    
    bkc := (*[3]int32)(unsafe.Pointer(backgroundColor)) //数组转切片
    backgroundColorValue := bkc[:]

    2. 基本类型转换较简单,直接用强制类型转换就可以,如下:

    #Go转换成C:
    var i int
    ci := C.int(i)
    
    #C转换成Go:
    var i C.int
    goi := int(i)

    3.字符串类型转换也不是很难,有一点需要注意,就是在将C语言中的char数组转换成Go的string时需要做一点小修改,如下:

    #Go转换成C:
    var str string
    cstr := C.CString(str)
    
    #C转换成Go:
    /*
    #include <stdlib.h>
    #include <stdio.h>
    char foo[] = "hellofoo";
    char *bar = "hellobar";
    */
    import "C"
    import "fmt"
    
    func main() {
        fmt.Printf("%s\n", C.GoString(&C.foo[0]))
        fmt.Printf("%s\n", C.GoString(C.bar))
    }

    4. 数组类型转换

    以下用int和float数组为例子,如下:

    /*
    #include <stdio.h>
    int cIArray[] = {1, 2, 3, 4, 5, 6, 7};
    float cFArray[] = {1.011, 2.022, 3.022, 4.023, 5.02, 6.03, 7.045};
    */
    import "C"
    import "fmt"
    
    func main() {
        goIArray := C.cIArray[:]
        fmt.Println(goIArray)
        goFArray := C.cFArray[:]
        fmt.Println(goFArray)
    }
  • 相关阅读:
    Eclipse/MyEclip中使用复制粘贴功能很卡
    ActiveMQ使用教程
    ActiveMQ常见消息类型
    推荐12个最好的 JavaScript 图形绘制库
    eclipse 打包springboot成jar
    CentOS 7下ELK(6.2.4)++LogStash+Filebeat+Log4j日志集成环境搭建
    elasticsearch启动常见错误
    使用haproxy实现负载均衡集群
    linux配置mysql5.6 主主复制同步
    力扣No.102 二叉树的层次遍历
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/15683384.html
Copyright © 2011-2022 走看看