为了账号安全,请及时绑定邮箱和手机立即绑定

从 Go 中读取 C 类型字符串

从 Go 中读取 C 类型字符串

Go
冉冉说 2021-07-04 16:47:02
我正在尝试用 Go 编写一个简单的 OpenGL 应用程序,并想从驱动程序中读取 OpenGL 版本。我正在使用这个功能:http://godoc.org/github.com/chsc/gogl/gl21#GetString这是一个包装函数const GLubyte* glGetString( GLenum name);这段代码:fmt.Println(gl.GetString(gl.RENDERER))fmt.Println(*gl.GetString(gl.VERSION))产出0x4708ae050输出可能是一个 C 类型的字符串,指向字符串第一个字节的指针。如何将 GetString 函数的输出转换为普通的 go 字符串?解决方案:该包提供了正确的转换器功能,只是不是很明显:fmt.Println( gl.GoStringUb( gl.GetString( gl.RENDERER )))一般方法:(如果包不提供 *Ubyte 到字符串转换功能)pointer := unsafe.Pointer(gl.GetString(gl.RENDERER))str := C.GoString( (*C.char)(pointer) )fmt.Println(str)
查看完整描述

1 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

您链接的包提供了一个可以解决问题的函数GoStringUb

render := gl.GoStringUb(gl.GetString(gl.RENDERER))
version := gl.GoStringUb(gl.GetString(gl.VERSION))


查看完整回答
反对 回复 2021-07-19
  • 1 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信