Ich muss ein Client-Server-Beispiel über TCP erstellen. Auf der Client-Seite habe ich 2 Zahlen gelesen und sie an den Server gesendet. Das Problem ist, dass ich nicht von []byte
Nach int
konvertieren kann, da die Kommunikation nur Daten vom Typ []byte
Akzeptiert.
Gibt es eine Möglichkeit, []byte
In int
umzuwandeln, oder kann ich int
an den Server senden?
Einige Beispielcodes werden sehr geschätzt.
Vielen Dank.
(Umbuchung diese Antwort )
Sie können encoding/binary's ByteOrder verwenden, um dies für 16, 32, 64-Bit-Typen zu tun
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)
}
Ausgehend von einem Byte-Array können Sie das Binärpaket verwenden, um die Konvertierungen durchzuführen.
Zum Beispiel, wenn Sie ints lesen möchten:
buf := bytes.NewBuffer(b) // b is []byte
myfirstint, err := binary.ReadVarint(buf)
anotherint, err := binary.ReadVarint(buf)
Das gleiche Paket ermöglicht das Lesen von vorzeichenlosen int- oder float-Werten mit den gewünschten Bytereihenfolgen unter Verwendung der Funktion general Read .
Für das Kodieren/Dekodieren von Zahlen in/aus Byte-Sequenzen gibt es das Kodieren/Binär -Paket. Es gibt Beispiele in der Dokumentation: siehe Abschnitt Beispiele im Inhaltsverzeichnis.
Diese Codierungsfunktionen arbeiten mit io.Writer - Schnittstellen. Der Typ net.TCPConn implementiert io.Writer, sodass Sie direkt in Netzwerkverbindungen schreiben/lesen können.
Wenn Sie auf beiden Seiten der Verbindung ein Go-Programm haben, möchten Sie möglicherweise encoding/gob verwenden. Im Artikel " Datenmengen " finden Sie eine exemplarische Vorgehensweise zur Verwendung von gob (springen Sie nach unten, um ein in sich geschlossenes Beispiel zu sehen).
Wenn [] Byte ASCII Bytenummern ist, konvertieren Sie zuerst das [] Byte in einen String und verwenden Sie die Methode strconv
package Atoi
, die den String in int konvertiert.
package main
import (
"fmt"
"strconv"
)
func main() {
byteNumber := []byte("14")
byteToInt, _ := strconv.Atoi(string(byteNumber))
fmt.Println(byteToInt)
}
geh auf den Spielplatz - https://play.golang.org/p/gEzxva8-BGP