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