如何解决cgo 将 gobytes 复制到 c 数组中
我正在阅读 go 文档并尝试使用示例来完成主要要求。我在这个问题上花了很多时间,但无法解决问题。
在我的项目中,要求将 go 字节数据复制到 C.char array[10] 中,这是一个 C 结构数据变量。我检查了 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
}
解决方法
您可以在 strcpy
中使用 string.h
。以下是一个工作示例:
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
才能使其工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。