web-dev-qa-db-fra.com

Comment passer de [] octets pour obtenir de l'hexadécimal

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)
}

Tout ce dont j'ai besoin est une chaîne de clé de hachage qui est convertie à partir d'une chaîne d'entrée. J'ai pu l'obtenir au format octets en utilisant h.Sum (nil) et j'ai pu imprimer la clé de hachage au format% x. Mais je veux retourner le format% x à partir de cette fonction afin de pouvoir l'utiliser pour convertir l'adresse e-mail en Hash-key et l'utiliser pour accéder à Gravatar.com.

Comment obtenir la clé de hachage au format% x en utilisant la fonction md5 dans Go?

Merci,

25
user2671513

Si j'ai bien compris, vous souhaitez retourner le format% x:

vous pouvez importer de l'hex et utiliser la méthode EncodeToString

str := hex.EncodeToString(h.Sum(nil))

ou simplement Sprintf la valeur:

func md(str string) string {
    h := md5.New()
    io.WriteString(h, str)

    return fmt.Sprintf("%x", h.Sum(nil))
}

notez que Sprintf est plus lent, car il doit analyser la chaîne de format, puis réfléchir en fonction du type trouvé

http://play.golang.org/p/vsFariAvKo

31
fabrizioM

Vous devez éviter d'utiliser le package fmt pour cela. Le package fmt utilise la réflexion, et il est coûteux pour autre chose que le débogage. Vous savez ce que vous avez et ce que vous souhaitez convertir, vous devez donc utiliser le package de conversion approprié.

Pour convertir du binaire en hexadécimal et inversement, utilisez le package encoding/hex .

Vers Hex string:

str := hex.EncodeToString(h.Sum(nil))

Depuis Hex string:

b, err := hex.DecodeString(str)

Il existe également des fonctions Encode/Decode pour []byte.

Lorsque vous devez convertir en/à partir d'une décimale, utilisez le package strconv .

De int à string:

str := strconv.Itoa(100)

De string à int:

num, err := strconv.Atoi(str)

Il y a plusieurs autres fonctions dans ce paquet qui font d'autres conversions (base, etc.).

Donc, sauf si vous déboguez ou formatez un message d'erreur, utilisez les conversions appropriées . S'il vous plaît.

15
Luke