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

时间:2015-03-31 03:41:12

标签: arrays string go hex

我尝试将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]

2 个答案:

答案 0 :(得分:3)

  

我想将string转换为byte数组,其中包含string中每个字符的十六进制值。

您只需使用简单类型conversionstring转换为[]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))