Cgo类型转换

Q446512799 2020-05-13 03:57:30
c接口参数定义的char*,Cgo可以通过C.CString进行转换
c_name := C.CString(name)
如果c里面定义的unsigned char*,能通过什么接口转换吗?
...全文
288 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Q446512799 2020-05-18
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
通过把byte数组,转成unsafe pointer,再转成*C.uchar 比如 /* C代码 #include <stdio.h> void test(unsigned char* b) { printf("fetch: %s\n", b); b[0] = 'b'; b[1] = 'a'; b[2] = 'r'; } */ //Go代码 import "C" import ( "fmt" "reflect" "unsafe" ) func main() { buf := []byte("foo") fmt.Printf("original: %s\n", buf) data := (*reflect.SliceHeader)(unsafe.Pointer(&buf)).Data C.test((*C.uchar)(unsafe.Pointer(data))) fmt.Printf("result: %s\n", buf) }
非常感谢,不过已经结贴了,这个方法我从别的项目里的代码中找到了
qybao 2020-05-16
  • 打赏
  • 举报
回复
通过把byte数组,转成unsafe pointer,再转成*C.uchar 比如 /* C代码 #include <stdio.h> void test(unsigned char* b) { printf("fetch: %s\n", b); b[0] = 'b'; b[1] = 'a'; b[2] = 'r'; } */ //Go代码 import "C" import ( "fmt" "reflect" "unsafe" ) func main() { buf := []byte("foo") fmt.Printf("original: %s\n", buf) data := (*reflect.SliceHeader)(unsafe.Pointer(&buf)).Data C.test((*C.uchar)(unsafe.Pointer(data))) fmt.Printf("result: %s\n", buf) }

2,348

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • 俺叫西西弗斯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧