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)
    }
  • 相关阅读:
    MT【347】单变量求最值
    MT【346】拐点处分界
    MT【345】三个绝对值的和
    MT【344】构造函数
    MT【343】三数平方法
    MT【342】条件为非负实数
    MT【341】换元变形
    MT【340】彭塞列闭合定理
    MT【339】待定系数
    MT【338】分式变形
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/15683384.html
Copyright © 2011-2022 走看看