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)
    }
  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/15683384.html
Copyright © 2011-2022 走看看