将uint16数组转换为字符串

时间:2018-07-28 20:48:41

标签: go

我有一个来自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进程名称转换为字符串)

2 个答案:

答案 0 :(得分:1)

  

package windows

     

import "golang.org/x/sys/windows"

     

func UTF16ToString

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])
}