我尝试将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的链接:http://play.golang.org/p/8PMEFTCYSd
但它给了我错误 * encoding / hex:无效字节:U + 0068' h' Golang * 。这里的问题是什么?我想将string
转换为byte
数组,其中包含string
中每个字符的十六进制值。我希望b[n]
包含十六进制值str[n]
。
答案 0 :(得分:3)
我想将
string
转换为byte
数组,其中包含string
中每个字符的十六进制值。
您只需使用简单类型conversion将string
转换为[]byte
(字节切片,与数组不完全相同!):
b := []byte(str)
你已经完成了!
如果要将其打印为十六进制string
,则可以使用string
和[]byte
{/ 3}} fmt.Printf()
函数执行此操作
fmt.Printf("%x", str)
// Or:
fmt.Printf("%x", b)
提示:您可以使用格式字符串"% x"
在字节/字符的每个十六进制形式之间打印一个空格:
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)
答案 1 :(得分:2)
您的代码正在尝试从十六进制解码。该字符串不是十六进制编码。
要将编码为十六进制,请尝试此
b := fmt.Sprintf("%x", str)
fmt.Printf("Decoded bytes %v", []byte(b))