Conversion de []byte en int dans Go pour la communication TCP
La communication sur TCP nécessite souvent l'échange de données sous forme de tableaux d'octets ( []octet). Cependant, dans certains scénarios, vous devrez peut-être convertir ces tableaux d'octets en nombres entiers (int) pour le traitement.
Méthodes de conversion
Pour convertir un tableau d'octets en nombre entier dans Go, vous pouvez utiliser deux méthodes principales :
1. Utilisation d'encoding/binary :
Le package encoding/binary fournit des fonctions qui vous permettent de convertir différents formats binaires en types Go. Plus précisément, pour convertir des tableaux d'octets en entiers, vous pouvez utiliser :
binary.LittleEndian.Uint32(mySlice) // Converts to 32-bit unsigned int binary.BigEndian.Uint32(mySlice) // Converts to 32-bit unsigned int in big endian format
2. Conversion personnalisée :
Vous pouvez également implémenter votre logique de conversion si les fonctions de la bibliothèque standard ne répondent pas à vos exigences spécifiques. Voici un exemple de conversion personnalisée pour convertir un tableau de 4 octets en un entier :
func bytesToInt(mySlice []byte) int { return int(mySlice[0]<<24 | mySlice[1]<<16 | mySlice[2]<<8 | mySlice[3]) }
Exemple d'application :
Dans votre exemple client-serveur, vous peut utiliser le code suivant pour envoyer des entiers au serveur :
package main import ( "encoding/binary" "net" ) func main() { // 2 numbers to send num1 := 100 num2 := 200 // Convert to byte arrays buf1 := make([]byte, 4) binary.LittleEndian.PutUint32(buf1, uint32(num1)) buf2 := make([]byte, 4) binary.LittleEndian.PutUint32(buf2, uint32(num2)) // Connect to server conn, err := net.Dial("tcp", "127.0.0.1:8080") if err != nil { // Handle error } // Send byte arrays to server if _, err := conn.Write(buf1); err != nil { // Handle error } if _, err := conn.Write(buf2); err != nil { // Handle error } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!