我有一个来自WinAPI PROCESSENTRY32.szExeFile
的uint16数组,我想将其转换为字符串。
这是我的var类型
var hello [260]uint16
现在我需要将hello转换为字符串。我该怎么办?
修改
这是我尝试过的:
func szExeFileToString(ByteString [260]uint16) string {
b := make([]byte, len(ByteString))
for i, v := range ByteString {
b[i] = byte(v)
}
return string(b)
}
但是,这会返回非常奇怪的字符串...
result(该函数应将PROCESSENTRY32.szExeFile
(-> [260]uint16
)类型的Windows进程名称转换为字符串)
答案 0 :(得分:1)
import "golang.org/x/sys/windows"
func UTF16ToString(s []uint16) string
UTF16ToString返回UTF-16序列s的UTF-8编码, 删除了终止的NUL。
使用windows.UTF16ToString
。例如,
package main
import (
"fmt"
"golang.org/x/sys/windows"
)
func main() {
var szExeFile [260]uint16
szExeFile = [260]uint16{'e', 'x', 'e', 'F', 'i', 'l', 'e'}
exeFile := windows.UTF16ToString(szExeFile[:])
fmt.Println(exeFile)
}
输出:
exeFile
答案 1 :(得分:-1)
解决了。这是固定的功能,可以帮助任何遇到此问题的人将PROCESSENTRY32.szExeFile
结果转换为字符串。
注意:我也忘记使用kernel32.NewProc("Process32FirstW")
和kernel32.NewProc("Process32NextW")
而不是kernel32.NewProc("Process32First")
func szExeFileToString(ByteString [260]uint16) string {
var End = 0
for i, _ := range ByteString {
if ByteString[i] == 0 {
End = i
break
}
}
return syscall.UTF16ToString(ByteString[:End])
}