Go语言MD5哈希字节数组转字符串异常问题求助
MD5字节数组转字符串的差异解析
MD5哈希函数生成的是16字节的二进制数据,这些字节的数值范围是0-255,其中大部分字节对应的不是可打印的ASCII或UTF-8字符(比如控制字符、非标准ASCII字符)。直接用
string()转换时,这些不可打印的字节会被解释成乱码符号,这不是操作错误,是二进制数据转字符串的必然结果。fmt.Sprintf("%x", hash.Sum(nil))的作用是把每个二进制字节转换成两位十六进制字符,比如字节值0xd4会被转成字符串"d4",0x1d转成"1d"。所有字节都被转换成可打印的十六进制字符,这才是我们日常看到的MD5哈希字符串格式。除了
fmt.Sprintf("%x"),还可以用标准库的encoding/hex包实现相同效果,代码更直观:
import "encoding/hex" // ... hashStringGood := hex.EncodeToString(hash.Sum(nil))
内容的提问来源于stack exchange,提问作者Galty
相关产品推荐
相关产品推荐

