Bolehkah seseorang memberitahu saya apa yang salah?
Saya tidak boleh menukar tatasusunan bait yang dijana oleh fungsi jumlah cincang melalui penukaran rentetan, saya perlu menggunakan sprintf.
Ini ialah coretan kod:
f, _ := os.Open(filename) hash := md5.New() io.Copy(hash, f) hashStringGood := fmt.Sprintf("%x", hash.Sum(nil)) hashStringJunk := string(hash.Sum(nil)[:])
hasstringgood akan menghasilkan d41d8cd98f00b204e9800998ecf8427e
hashstringjunk akan menghasilkan ��ُ�� ���b~
Apabila anda menukar data perduaan rawak kepada rentetan tanpa skema pengekodan, tidak mungkin data itu akan dipetakan kepada jujukan aksara yang boleh dicetak.
Daripada bahagian "Strings and Byte Slicing" definisi kata kerja dalam fmt
包的 %x
动词是对二进制数据进行十六进制编码的便捷方法。来自fmt
dokumentasi pakej : p>
%s the uninterpreted bytes of the string or slice %q a double-quoted string safely escaped with go syntax %x base 16, lower-case, two characters per byte
Sebagai alternatif, anda boleh mengekod data menggunakan pakej bersarang di bawah pakej encoding
:
package main import ( "crypto/md5" "encoding/base64" "encoding/hex" "fmt" ) func main() { hash := md5.sum([]byte("input to be hashed")) fmt.printf("using %%s verb: %s\n", hash) fmt.printf("using %%q verb: %q\n", hash) fmt.printf("using %%x verb: %x\n", hash) hexhash := hex.encodetostring(hash[:]) fmt.printf("converted to a hex-encoded string: %s\n", hexhash) base64hash := base64.stdencoding.encodetostring(hash[:]) fmt.printf("converted to a base64-encoded string: %s\n", base64hash) }
Output
Using %s verb: �����Q���6���5� Using %q verb: "\x8d\xa8\xf1\xf8\x06\xd3Q\x9d\xa1\xe46\xdb\xfb\x9f5\xd7" Using %x verb: 8da8f1f806d3519da1e436dbfb9f35d7 Converted to a hex-encoded string: 8da8f1f806d3519da1e436dbfb9f35d7 Converted to a base64-encoded string: jajx+AbTUZ2h5Dbb+5811w==
Atas ialah kandungan terperinci Keanehan GO menukar tatasusunan Btye daripada cincang MD5 kepada rentetan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!