c - 从 []byte 到 char*

标签 c pointers go cgo

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

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

我尝试将指针传递给 slice 中的第一个 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 找到这个。)

关于c - 从 []byte 到 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375997/

相关文章:

c - 如何在 Linux 上按名称对目录中的文件进行排序

c - 指向连续二维数组的指针

pointers - 堆对象的堆栈引用

go - 将结构属性( slice )传递给从中删除元素的函数时的奇怪行为

docker - 如何为docker build缓存golang软件包的build工件?

使用 SSL 密码连接 nginx websocket

将包含科学记数法数字的字符串矩阵转换为单行数组

c++ - 将 CComPtr<IShelltem2> 转换为 LPWSTR*?

c++ - 如何在 C++ 中将二进制数据分成帧?

go - 为什么 fmt.Println() 的输出不是我需要的