Ich muss ein Client-Server-Beispiel über TCP erstellen. Auf der Client-Seite lese ich 2 Nummern und sende sie an den Server. Das Problem, mit dem ich konfrontiert war, ist, dass ich nicht von []byte
nach konvertieren kann int
, da die Kommunikation nur Daten vom Typ akzeptiert []byte
.
Gibt es eine Möglichkeit zur Umwandlung []byte
zu int
oder ich senden kann , int
an den Server?
Einige Beispielcodes werden sehr geschätzt.
Vielen Dank.
tcp
client-server
byte
type-conversion
go
Emanuel
quelle
quelle
Antworten:
(Reposting dieser Antwort )
Sie können den ByteOrder von encoding / binary verwenden , um dies für 16-, 32- und 64-Bit-Typen zu tun
abspielen
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) }
quelle
Uint64
Methode schlägt in dieser Zeile in der Quelle fehl_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808
, da der Index offensichtlich außerhalb der Grenzen liegt. Ich brauchte dieUint16
Methode.Ausgehend von einem Byte-Array können Sie die Konvertierungen mit dem Binärpaket durchfü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 Int oder Floats ohne Vorzeichen mit den gewünschten Bytereihenfolgen mithilfe der allgemeinen Lesefunktion .
quelle
binary.Read()
stattdessen. Siehe: codereview.stackexchange.com/questions/15945/...Wenn [] Byte ASCII-Byte-Nummern sind, konvertieren Sie zuerst das [] Byte in einen String und verwenden Sie die
strconv
PaketmethodeAtoi
, die den String in int konvertiert.package main import ( "fmt" "strconv" ) func main() { byteNumber := []byte("14") byteToInt, _ := strconv.Atoi(string(byteNumber)) fmt.Println(byteToInt) }
Spielplatz - https://play.golang.org/p/gEzxva8-BGP
quelle
Zum Codieren / Decodieren von Zahlen zu / von Bytesequenzen gibt es das Codierungs- / Binärpaket . In der Dokumentation finden Sie Beispiele: Siehe Abschnitt Beispiele im Inhaltsverzeichnis.
Diese Codierungsfunktionen arbeiten auf 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, sollten Sie sich die Verwendung von encoding / gob ansehen . Im Artikel " Gobs of Data " finden Sie eine exemplarische Vorgehensweise zur Verwendung von Gobs (springen Sie nach unten, um ein eigenständiges Beispiel anzuzeigen ).
quelle
*TCPConn
als Argument angob.NewEncoder
/ übergebengob.NewDecoder
.now := []byte{0xFF,0xFF,0xFF,0xFF} nowBuffer := bytes.NewReader(now) var nowVar uint32 binary.Read(nowBuffer,binary.BigEndian,&nowVar) fmt.Println(nowVar)
4294967295
quelle
var bs []byte value, _ := strconv.ParseInt(string(bs), 10, 64)
quelle