encoding/hex: 无效字节: U+0068 'h' Golang

encoding/hex: invalid byte: U+0068 'h' Golang

我正在尝试将 string 转换为包含其十六进制值的 byte 数组,这是我编写的代码:

package main

import (
     "encoding/hex"
     "fmt"
     "os"
)

func main() {
     str :="abcdefhijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789"

     b, err := hex.DecodeString(str)

     if err != nil {
             fmt.Println(err)
             os.Exit(1)
     }

     fmt.Printf("Decoded bytes %v \n ", b)
}

这是来自 Go PlayGround 的 link:http://play.golang.org/p/8PMEFTCYSd

但它给我错误 *encoding/hex:无效字节:U+0068 'h' Golang *。这里有什么问题?我想将 string 转换为 byte 数组,其中包含 string 中每个字符的十六进制值。我希望 b[n] 包含 str[n].

的十六进制值

您的代码正在尝试从 十六进制解码 。该字符串不是十六进制编码的。

要将 编码为 十六进制,试试这个

b := fmt.Sprintf("%x", str)

fmt.Printf("Decoded bytes %v", []byte(b))

I want to convert my string into byte array containing hexadecimal values of each character in the string.

您可以使用简单类型 conversion:

string 简单地转换为 []byte(字节切片,与数组不完全相同!)
b := []byte(str)

大功告成!

如果您想将其打印为十六进制 string,您可以使用 fmt.Printf() 函数同时使用 string[]byte

fmt.Printf("%x", str)
// Or:
fmt.Printf("%x", b)

提示:您可以使用格式字符串 "% x" 在 bytes/characters 的每个十六进制形式之间打印 space:

fmt.Printf("% x", str)

如果您希望十六进制形式的结果为 string,您可以使用 fmt.Sprintf() 变体:

hexst := fmt.Sprintf("%x", str)
// Or:
hexst := fmt.Sprintf("%x", b)

或者作为替代方案,您可以使用 encoding/hex 包中的 hex.EncodeToString() 函数:

hexst := hex.EncodeToString(b)