2015-03-31 22 views
-2

我想一个string转换成包含其十六进制值的byte阵列,这里是我写的代码:编码/六角:无效字节:U + 0068“H” Golang

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

这里是进入游乐场的链接:http://play.golang.org/p/8PMEFTCYSd

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

回答

2

我想我stringbyte包含数组的十六进制值转换的string每个字符。

你可以简单地转换string[]byte通过使用简单的类型conversion(字节片,不完全一样阵!):

b := []byte(str) 

大功告成!

如果你想打印为十六进制string,你可以用做与fmt.Printf()功能既string[]byte

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/hexhex.EncodeToString()功能:

hexst := hex.EncodeToString(b) 
2

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

要编码六角试试这个

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

fmt.Printf("Decoded bytes %v", []byte(b)) 
相关问题