Ce face encoding/hex.EncodeToString
hex.EncodeToString(date) scrie fiecare octet ca două cifre hexazecimale cu litere mici: octetul 255 devine ff, iar textul „Go” devine 476f. Rezultatul are exact de două ori mai multe caractere decât octeți. Așa se afișează hash-urile SHA-256 și MD5, cheile, culorile și identificatorii.
hex.DecodeString(s) face drumul invers. Acceptă litere mari și mici și returnează eroare pentru caractere care nu sunt hexazecimale (hex.InvalidByteError) sau pentru un număr impar de caractere (hex.ErrLength).
Parametri
| Parametru | Descriere |
|---|---|
src / s |
Octeții de codat sau textul hexazecimal de decodat. |
Ce returnează
EncodeToString: textul hex. DecodeString: octeții și o eroare.
Exemple
Exemplul 1: Text și octeți în hexazecimal
package main
import (
"encoding/hex"
"fmt"
)
func main() {
fmt.Println(hex.EncodeToString([]byte("Go")))
fmt.Println(hex.EncodeToString([]byte("ș")), "(ș are 2 octeți în UTF-8)")
fmt.Println(hex.EncodeToString([]byte{0, 15, 16, 255}))
culoare, err := hex.DecodeString("1E90FF")
fmt.Println("RGB:", culoare, err)
_, err = hex.DecodeString("abc")
fmt.Println("Lungime impară:", err)
_, err = hex.DecodeString("zz")
fmt.Println("Caracter invalid:", err)
}
Rezultat
476f
c899 (ș are 2 octeți în UTF-8)
000f10ff
RGB: [30 144 255] <nil>
Lungime impară: encoding/hex: odd length hex string
Caracter invalid: encoding/hex: invalid byte: U+007A 'z'
Exemplul 2: Hash afișat în hex
package main
import (
"crypto/sha256"
"encoding/hex"
"fmt"
)
func main() {
suma := sha256.Sum256([]byte("dexblog.ro"))
text := hex.EncodeToString(suma[:])
fmt.Println(text)
fmt.Println("La fel ca Sprintf cu x:", text == fmt.Sprintf("%x", suma))
}
Rezultat
166d3b7ccdd65543c2df9ef4036f11710cba10a6bc745ca0455c8494fedbbcf8
La fel ca Sprintf cu x: true
Greșeli frecvente
- Dai lui
EncodeToStringun tablou ([32]byte) în loc de slice: nu compilează. Scriesuma[:]. - Compari hash-uri hex scrise cu litere diferite (
ABșiab) ca texte: nu sunt egale. Decodează-le sau adu-le la litere mici.
Comenzi înrudite
encoding/hex.Dump: Afișează octeții ca tabel: adresa, 16 octeți în hex pe rând și caracterele lor, ca hexdump -C.crypto/sha256.Sum256: Calculează amprenta SHA-256 a unor date: 32 de octeți (64 de cifre hex) care se schimbă complet la orice modificare.encoding/base64.Encoding: Codează octeți ca text Base64 (litere, cifre, +/ sau -_); StdEncoding, URLEncoding și variantele Raw fără „=”.