webentwicklung-frage-antwort-db.com.de

Konvertieren von [] Byte nach int in der Go-Programmierung

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.

59
Emanuel

(Umbuchung diese Antwort )

Sie können encoding/binary's ByteOrder verwenden, um dies für 16, 32, 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)
}
63
David Budworth

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 .

10
Denys Séguret

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).

6
axw

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

2
Tinkal Gogoi