簡體   English   中英

將uint16數組轉換為字符串

[英]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"

函數UTF16ToString

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM