[英]Convert uint16 array to string
我有一個來自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)
}
但是,這將返回非常奇怪的字符串... 結果 (該函數應將PROCESSENTRY32.szExeFile
(-> [260]uint16
)類型的Windows進程名稱轉換為字符串)
import "golang.org/x/sys/windows"
func UTF16ToString(s []uint16) string
UTF16ToString返回UTF-16序列的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
修復。 這是固定的功能,可以幫助任何遇到此問題的人將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])
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.