C char name [8]到GoLang Name [8] byte

时间:2016-05-25 20:04:39

标签: go cgo

我有一个填充C结构的C函数:

typedef struct {
  char name[8];
}

我需要将数据复制到具有相同内容的Go lang结构中:

type sData struct {
  Name [8]byte
}

该结构具有多种尺寸的参数:4,12,32因此,拥有一个处理超过一种尺寸的功能会很不错。

感谢

1 个答案:

答案 0 :(得分:1)

为了使它更通用,您可以将C char数组分解为*C.char,然后使用unsafe.Pointer将其转换回数组。

func charToBytes(dest []byte, src *C.char) {
    n := len(dest)
    copy(dest, (*(*[1024]byte)(unsafe.Pointer(src)))[:n:n])
}

或者可能更容易

func charToBytes(src *C.char, sz int) []byte {
    dest := make([]byte, sz)
    copy(dest, (*(*[1024]byte)(unsafe.Pointer(src)))[:sz:sz])
    return dest
}