web-dev-qa-db-fra.com

Comment convertir en octets [] octet en int

J'ai besoin de créer un exemple client-serveur avec TCP. Du côté client, j'ai lu 2 chiffres et je les ai envoyés au serveur. Le problème que j'ai rencontré est que je ne peux pas convertir de []byte à int, car la communication accepte uniquement les données de type []byte.

Est-il possible de convertir []byte à int ou je peux envoyer int au serveur?

Quelques exemples de code seront vraiment appréciés.

Merci.

59
Emanuel

(republication cette réponse )

Vous pouvez utiliser le codage/binaire ByteOrder pour le faire pour les types 16, 32, 64 bits

Jouer

package main

import "fmt"
import "encoding/binary"

func main() {
    var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
    data := binary.BigEndian.Uint64(mySlice)
    fmt.Println(data)
}
63
David Budworth

À partir d'un tableau d'octets, vous pouvez utiliser le paquet binaire pour effectuer les conversions.

Par exemple si vous voulez lire les ints:

buf := bytes.NewBuffer(b) // b is []byte
myfirstint, err := binary.ReadVarint(buf)
anotherint, err := binary.ReadVarint(buf)

Le même package permet la lecture de unsigned int ou floats, avec les ordres d'octets souhaités, à l'aide de la fonction general Read .

10
Denys Séguret

Pour encoder/décoder des nombres en/à partir de séquences d'octets, il existe le paquet encoding/binary . La documentation contient des exemples: reportez-vous à la section Exemples de la table des matières.

Ces fonctions de codage fonctionnent sur des interfaces io.Writer . Le type net.TCPConn implémente io.Writer afin que vous puissiez écrire/lire directement sur les connexions réseau.

Si vous avez un programme Go d'un côté ou de l'autre de la connexion, vous pouvez envisager d'utiliser encoding/gob . Voir l'article " Gobs of data " pour un aperçu de l'utilisation de gob (passez au bas de la page pour voir un exemple complet).

6
axw

Si [] octet est ASCII nombres d'octets, convertissez d'abord l'octet [] en chaîne et utilisez la méthode strconv package Atoi qui convertit chaîne en entier.

package main
import (
    "fmt"
    "strconv"
)

func main() {
    byteNumber := []byte("14")
    byteToInt, _ := strconv.Atoi(string(byteNumber))
    fmt.Println(byteToInt)
}

aller au terrain de jeu - https://play.golang.org/p/gEzxva8-BGP

2
Tinkal Gogoi