【问题标题】:Convert string of hex value into []byte representation将十六进制值的字符串转换为 []byte 表示
【发布时间】:2019-10-03 17:41:42
【问题描述】:

我看到了多个将字符串转换为字节数组的问题,但我想要的是转换为字节 []。 例如,如果我有a := "68656c6c6f20776f726c64",如果我有[]byte(a),它会将每个数字转换为其十六进制值,但我想要的是直接将其直接解释为十六进制,这样我就有[]byte b = [68, 65, 6c, etc.]

除了迭代字符串和每 2 个字符将它们附加到 []byte 之外,还有其他不同的方法吗?

【问题讨论】:

  • hex.DecodeString
  • byte[] 在 Go 中毫无意义。
  • 再次重申:byte[] 在 Go 中毫无意义。
  • 那绝对是十六进制解码。

标签: arrays go slice


【解决方案1】:

字符串字节数组。将一个投射到另一个得到你所看到的;字符 a 有一个整数值(97,或十六进制的 61),您将获得组成字符串的字节数组。如果您希望字符串"ff" 成为整数255(十六进制的ff),那不是强制转换,而是基于特定逻辑解析(解码)字符串(即字符串由十六进制的ASCII 表示组成)位数)。为此,您需要使用适当的解码器,即标准库的 hex.DecodeString,如 mh-cbon 建议的那样:

src := []byte("68656c6c6f20776f726c64")

dst := make([]byte, hex.DecodedLen(len(src)))
n, err := hex.Decode(dst, src)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%s\n", dst[:n])

【讨论】:

  • 我明白了,我的错误。我还在学习 Go 的工作原理,我习惯了没有类型的 python。谢谢你的解释。
猜你喜欢
  • 2018-01-22
  • 2014-12-05
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2018-12-12
  • 2017-05-16
  • 2015-07-30
相关资源
最近更新 更多