英文:
C char name[8] to GoLang Name [8]byte
问题
我有一个填充C结构体的C函数:
typedef struct {
char name[8];
}
我需要将数据复制到具有相同内容的Go语言结构体中:
type sData struct {
Name [8]byte
}
该结构体具有多个大小的参数:4、12、32,因此最好有一个处理多个大小的函数。
谢谢
英文:
I've got a C function that fills a C struct:
typedef struct {
char name[8];
}
I need to copy data into Go lang struct that has the same content:
type sData struct {
Name [8]byte
}
The structure has parameters of multiple sizes: 4, 12, 32 so it would be nice to have a function that deals with more than just one size.
thanks
答案1
得分: 1
为了使这个更通用一些,你可以将 C 字符数组分解为 *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
}
英文:
To make this a little more generic, you can decompose the C char array to a *C.char
, then use unsafe.Pointer
to cast it back to an array.
func charToBytes(dest []byte, src *C.char) {
n := len(dest)
copy(dest, (*(*[1024]byte)(unsafe.Pointer(src)))[:n:n])
}
Or maybe a little easier
func charToBytes(src *C.char, sz int) []byte {
dest := make([]byte, sz)
copy(dest, (*(*[1024]byte)(unsafe.Pointer(src)))[:sz:sz])
return dest
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论