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.
(republication cette réponse )
Vous pouvez utiliser le codage/binaire ByteOrder pour le faire pour les types 16, 32, 64 bits
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)
}
À 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 .
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).
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