为了账号安全,请及时绑定邮箱和手机立即绑定

编码/十六进制:无效字节:U+0068 'h' Golang

编码/十六进制:无效字节:U+0068 'h' Golang

Go
心有法竹 2021-09-27 15:44:21
我正在尝试将 astring转换为byte包含其十六进制值的数组,这是我编写的代码:package mainimport (     "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: invalid byte: U+0068 'h' Golang *。这里有什么问题?我想将 my 转换string为byte包含 .csv 文件中每个字符的十六进制值的数组string。我想b[n]包含的十六进制值str[n]。
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我想将 my 转换string为byte包含 .csv 文件中每个字符的十六进制值的数组string。


您可以使用简单的类型转换简单地将 a 转换string为 a []byte(字节切片,与数组不完全相同!):


b := []byte(str)

你完成了!


如果您想将其打印为十六进制string,您可以fmt.Printf()使用 thestring和 the函数来实现[]byte:


fmt.Printf("%x", str)

// Or:

fmt.Printf("%x", b)

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


fmt.Printf("% x", str)

如果要将十六进制形式的结果作为 a string,则可以使用fmt.Sprintf()变体:


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

// Or:

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

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


hexst := hex.EncodeToString(b)


查看完整回答
反对 回复 2021-09-27
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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


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


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


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


查看完整回答
反对 回复 2021-09-27
  • 2 回答
  • 0 关注
  • 444 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信