Преобразование С типов в Golang

Столкнулся с проблемой преобразования СИ типов в Go. Возможно ли выполнить преобразование без сторонних библиотек в методе I16toU32?

package main

import "C"
import (
    "fmt"
    "time"
)

//#cgo CFLAGS: -Wall -O2 -m64 -I/usr/local/adlink/pcis-dask/include64
//#cgo LDFLAGS: -L/usr/local/adlink/lib64 -lpci_dask64
//#include "dask.h"
import "C"

func main() {
    var card C.I16 = 1
    var cardNumber C.U16 = 0
    var outValue C.U32 = true

    card = C.Register_Card(C.PCI_7432, cardNumber)
    fmt.Printf("open device file successfully!! %v \n", card)

    for {
        C.DO_WritePort(i16U16Cast(card), 0, I16toU32(outValue))
        time.Sleep(time.Second)
        outValue = !outValue
    }
}

func I16toU32(value С.I16) C.U32 {

    var casted C.U32 = // Магия?

    return casted
}

Пробовал по разному, так и не смог получить желаемый результат


Ответы (1 шт):

Автор решения: Pak Uula

Просто берёте и приводите тип: casted := C.U32(value)

package main

// #include <stdint.h>
// typedef int16_t I16;
// typedef uint32_t U32;
import "C"
import "fmt"

func main() {
    var card C.I16 = -0x1234
    fmt.Printf("%x\n", I16toU32(card))
}

func I16toU32(value C.I16) C.U32 {

    casted := C.U32(value)

    return casted
}

Результат: ffffedcc

→ Ссылка