http://play.golang.org/p/SKtaPFtnKO
func md(str string) []byte {
h := md5.New()
io.WriteString(h, str)
fmt.Printf("%x", h.Sum(nil))
// base 16, with lower-case letters for a-f
return h.Sum(nil)
}
我需要的是从输入字符串转换的Hash-key字符串。我能够以字节格式获取它,使用h.Sum(nil)并能够以%x格式打印出Hash密钥。但我想从此函数返回%x格式,以便我可以使用它将电子邮件地址转换为Hash密钥并使用它来访问Gravatar.com。
如何在Go?
中使用md5函数获取%x格式的哈希密钥谢谢,
答案 0 :(得分:29)
如果我理解正确,您想要返回%x格式:
您可以导入十六进制并使用EncodeToString
方法
str := hex.EncodeToString(h.Sum(nil))
或只是Sprintf的值:
func md(str string) string {
h := md5.New()
io.WriteString(h, str)
return fmt.Sprintf("%x", h.Sum(nil))
}
请注意,Sprintf较慢,因为它需要解析格式字符串,然后根据找到的类型进行反映
答案 1 :(得分:15)
您应该避免使用fmt
包。 fmt
包使用反射,除了调试之外的其他任何东西都很昂贵。你知道你拥有什么,以及你想要转换成什么,所以你应该使用正确的转换包。
要从二进制转换为十六进制,然后返回,请使用encoding/hex包。
至十六进制string
:
str := hex.EncodeToString(h.Sum(nil))
来自Hex string
:
b, err := hex.DecodeString(str)
还有[]byte
的编码/解码功能。
当您需要转换为小数时,请使用strconv包。
从int
到string
:
str := strconv.Itoa(100)
从string
到int
:
num, err := strconv.Atoi(str)
此程序包中还有其他一些功能可以执行其他转换(基本等)。
因此,除非您正在调试或格式化错误消息,否则使用正确的转换。请。