从 Go 中读取 C 类型字符串

我正在尝试用 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))

产出


0x4708ae0

50

输出可能是一个 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)


冉冉说
浏览 261回答 1
1回答

繁花如伊

您链接的包提供了一个可以解决问题的函数GoStringUb:render := gl.GoStringUb(gl.GetString(gl.RENDERER)) version := gl.GoStringUb(gl.GetString(gl.VERSION))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go