95 votes

Comment convertir un octet en un nombre entier en programmation Go ?

Je dois créer un exemple de client-serveur sur TCP. Du côté client, je lis deux chiffres et je les envoie au serveur. Le problème que je rencontre est que je ne peux pas convertir de []byte à int car la communication n'accepte que les données de type []byte .

Y a-t-il un moyen de convertir []byte à int ou je peux envoyer int au serveur ?

Un exemple de code serait très apprécié.

Gracias.

106voto

David Budworth Points 1474

Vous pouvez utiliser l'encodage/binaire Ordre des octets pour faire cela 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)
}

15voto

Tinkal Gogoi Points 485

Si []octet est un nombre d'octets ASCII, convertissez d'abord l'octet []en chaîne de caractères et utilisez la fonction strconv paquet Atoi qui convertit une chaîne de caractères en un nombre 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

11voto

dystroy Points 145126

À partir d'un tableau d'octets, vous pouvez utiliser la fonction paquet binaire pour faire les conversions.

Par exemple, si vous voulez lire des ints :

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

Le même paquetage permet la lecture d'int ou de flottants non signés, avec les ordres d'octets souhaités, en utilisant la méthode générale suivante Lire función.

8voto

Inasa Xia Points 143
now := []byte{0xFF,0xFF,0xFF,0xFF}
nowBuffer := bytes.NewReader(now)
var  nowVar uint32
binary.Read(nowBuffer,binary.BigEndian,&nowVar)
fmt.Println(nowVar)

4294967295

6voto

axw Points 2630

Pour le codage/décodage de nombres vers/depuis des séquences d'octets, il existe la fonction codage/binaire paquet. Il existe des exemples dans la documentation : voir la section Exemples dans la table des matières.

Ces fonctions d'encodage opèrent sur io.Writer interfaces. Le site net.TCPConn implémente io.Writer, de sorte que vous pouvez écrire/lire directement sur les connexions réseau.

Si vous avez un programme Go de part et d'autre de la connexion, vous pouvez envisager d'utiliser la fonction codage/gob . Voir l'article " Des quantités de données "pour une présentation de l'utilisation de gob (passez au bas de la page pour voir un exemple complet).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X