go - 如何将 [1024]C.char 转换为 [1024]byte

标签 go cgo

如何转换此 C(数组)类型:

char my_buf[BUF_SIZE];

为此 Go(数组)类型:

type buffer [C.BUF_SIZE]byte

?尝试进行接口(interface)转换时出现此错误:

cannot convert (*_Cvar_my_buf) (type [1024]C.char) to type [1024]byte

最佳答案

最简单和最安全的方法是将其复制到一个 slice 中,而不是专门复制到[1024]byte

mySlice := C.GoBytes(unsafe.Pointer(&C.my_buff), C.BUFF_SIZE)

要在没有副本的情况下直接使用内存,您可以通过 unsafe.Pointer 对其进行“强制转换”。

mySlice := (*[1 << 30]byte)(unsafe.Pointer(&C.my_buf))[:int(C.BUFF_SIZE):int(C.BUFF_SIZE)]
// or for an array if BUFF_SIZE is a constant
myArray := *(*[C.BUFF_SIZE]byte)(unsafe.Pointer(&C.my_buf))

关于go - 如何将 [1024]C.char 转换为 [1024]byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40213224/

相关文章:

go - 如何修复 VS Code 错误 : "Not able to determine import path of current package by using cwd" for Go project

go - 构建 go 项目时忽略 ldflags

无法访问cgo中的c变量

go - 为什么包通过导出函数返回非导出函数来导出非导出函数

c - Go 与 C 库的包链接

c - 通过Cgo访问aerospike C客户端报错

linux - Golang - 不使用 cgo 时不允许使用 C 源文件

java - 使用 cgo 从 Go 返回 String[]

bash - 即使在其中定义的 go-routine 被终止,bash 脚本是否会继续执行?

c - Windows 编译 v8 时出现 pkg-config 错误