我想包装一个C函数,它取char*,指向字节的非空缓冲区(第一个元素).我试图用CGo将其封装在一个Go函数中,这样我就可以将其传递给[]byte,但我不知道如何进行转换.C函数签名的简化版本是

void foo(char const *buf, size_t n);

我试着用一个指针指向切片中的前byte

C.foo(&b[0], C.size_t(n))

不过,这不能编译:

cannot use &b[0] (type *byte) as type *_Ctype_char in function argument

那么正确的程序是什么呢?go-wiki只描述了相反的情况.

推荐答案

好的,这比我想象的要容易得多:

(*C.char)(unsafe.Pointer(&b[0]))

这招很管用.(在golang-nuts度找到了这个.)

Go相关问答推荐

如何处理Firestore的DataTo方法中的嵌套指针?

杜松子wine -戈尼克背景在 children 围棋例行公事中被取消

Go GORM创建表,但不创建列

mockgen不创建模拟

为什么没有正确生成这些元组?

将这两个函数合二为一的惯用方法

「GORM错误」不支持的数据类型:&[],不正确的模式

如何使用 GolangCI 删除未使用的导入

golang yaml 马歇尔网址

Golang 中的泛型类型转换

regex.ReplaceAll 但如果替换则添加相同数量的字符

在 Go 中公开公共 JWK

获取不带类型参数的泛型 struct 的类型名称

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

如何在切片增长时自动将切片的新元素添加到函数参数

级联调用泛型函数时的泛型类型推断

Golang ACMEv2 HTTP-01 挑战不挑战服务器

有没有办法在 golang 中定义可索引类型?

在 Golang 中获取谷歌云服务帐户的访问令牌?

go mod tidy 错误消息:但是 go 1.16 会 Select