Преобразование С типов в 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