将十六进制值的字符串转换为[] byte表示形式

时间:2019-05-16 12:31:36

标签: arrays go slice

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

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

1 个答案:

答案 0 :(得分:0)

字符串字节数组。将一个投向另一个可以得到您所看到的;字符a具有一个整数值(97,或者十六进制为61),并且您正在获得组成字符字符串的字节数组。如果您希望字符串"ff"成为整数255(十六进制为ff,则不是强制转换,而是根据特定逻辑对字符串进行解析(解码)(即,字符串由十六进制数字的ASCII表示形式。为此,您要使用适当的解码器,即mh-cbon建议的标准库的hex.DecodeString

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