看了很久go
的syscall
,左看右看里面有BytePtrFromString
却没有与之对应的BytePtrToString
,很不理解这种别扭的设计,只想骂一句太变态了。虽然可以用cgo
的C.GoString
代替,但是想到windows
下面用cgo
还要先装MingGW
,就感觉很不完美,浑身不舒服。强迫症犯了,必须写一个BytePtrToString
给自己治疗一下。
下面就给代码:
//convert C char* (以0结尾) to go string
package cstring
import (
"bytes"
"unsafe"
)
func BytePtrToString(p *byte) string {
buf1 := bytes.NewBufferString("")
for p1 := p; *p1 != byte(0); p1 = (*byte)(unsafe.Pointer(1 + (uintptr)(unsafe.Pointer(p1)))) {
buf1.WriteByte(*p1)
}
return buf1.String()
}
结束