谁能告诉我我哪里错了。
我不能通过字符串转换哈希和函数产生的字节数组,我必须使用Sprintf。
下面是代码片段:
f, _ := os.Open(filename)
hash := md5.New()
io.Copy(hash, f)
hashStringGood := fmt.Sprintf("%x", hash.Sum(nil))
hashStringJunk := string(hash.Sum(nil)[:])
hasStringGood将产生d41d8cd98f00b204e9800998ecf8427e
哈希字符串垃圾将产生��ُ�� ���B~
2条答案
按热度按时间chhkpiq41#
当您将随机二进制数据转换为没有编码方案的字符串时,数据不太可能Map到可打印字符序列。
fmt
包中的%x
动词是对二进制数据进行十六进制编码的一种方便方法。或者,您可以使用嵌套在the
encoding
package下面的包对数据进行编码:输出量
Go Playground
iyfamqjs2#
MD5 hash是一个128位的值。如果你把它转换成一个字符串,你会得到16个字节的二进制数据,其中很多是无法打印的。你必须用
fmt.Sprintf
或其他方法把它转换成一个字符串。