cgo将高字节复制到c数组中



我正在阅读go文档并尝试使用示例来完成主要需求。我在这个问题上花了很多时间,但没能解决这个问题。

在我的项目中,要求将go字节数据复制到C结构数据变量C.char数组[10]中。我检查了C.CBytes((,但这会创建新的内存。正在寻找类似于copy((的东西
下面的示例代码,我试图复制我最初的需求。

package main
import "C"
/*
#include <stdio.h>
#include <string.h>
struct name {
char fname[10];
char lname[10];
};
struct infor{
name ID[1];
int id;
};
int receive(struct infor *c){
printf("%s",c.ID.fname);
printf("n %s", c.id);
}
*/
type data struct {
n [10]byte
m [10]byte
}
func main(){
d := data{}
d.n = []byte("test1")
d.m = []byte("test2")
obj := C.struct_infor{}
obj.ID.fname = d.n
}

您可以在string.h中使用strcpy。以下是一个工作示例:

package main
/*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct mystruct {
char field[10];
};
*/
import "C"
import (
"fmt"
"unsafe"
)
func main() {
x := new(C.struct_mystruct)
bts := []byte("some text")
C.strcpy((*C.char)(unsafe.Pointer(&x.field[0])), (*C.char)(unsafe.Pointer(&bts[0])))
fmt.Printf("%#v", x)
}

重要的是,您必须获得第一个元素的不安全指针,并将其转换为*C.char,才能使工作

最新更新