作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想用cgo。在 C 端,我有包含 32 个字节的结构。
struct hash {
uint8_t bytes[32];
};
在 Go 尺寸上,我有非常相似的类型。
type Hash [32]bytes
我想用 Hash
类型的实例调用 C 函数 void f(struct hash)
。如果可能的话,我还想避免复制该值。
简单赋值 Chash C.struct_hash := hash
不起作用:
cannot use hash (type Hash) as type C.struct_hash in assignment
最佳答案
您可以使用 unsafe
包来转换数据。 Go 编译器无法再检查此处的类型,因此您需要确保 C.struct_hash
之间所有内容的大小和类型都相同。和 Hash
.
Chash := *(*C.struct_hash)(unsafe.Pointer(&hash))
关于go - 如何将 Go 结构转换为 C 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39794721/
我是一名优秀的程序员,十分优秀!