Umwandeln byte-array in int GEHEN mit Sprache
Sehe ich einige Antworten auf genau die selbe Frage habe ich noch: Wie umwandeln Byte array in int-in GO-Programmierung Sprache?
Schrieb ich unter Funktion zum umwandeln byte-array in int
func convertByteToInt(in []byte) int32 {
return (int32(in[0]) << 24 | int32(in[1]) << 16 | int32(in[2]) << 8 | int32(in[3]))
}
Davor, machte ich sicher, dass byte-array ist korrekt(base 256) Werte.
[0] = 54 (ASCII 6),
[1] = 54 (ASCII 6),
[2] = 49 (ASCII 1),
in[3] = 49 (ASCII, 1).
Also ich erwarte abrufen integer 6611 Wert aus byte-array, aber ich landete immer 909521201. Ich kann nicht verstehen, was genau passiert in so eine einfache Konvertierung.
Kann jemand flash etwas Licht?
Dank
Du hast eine ganze Zahl formatiert als Dezimalzahl string []byte. Konvertieren Sie Ihre []byte, string und strconv verwenden.Atoi und Freunde. Bitfiddling ist schlicht Unsinn hier. (Nicht Wert eine Antwort.)
InformationsquelleAutor Korba | 2014-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Volker ist das Recht in seinem Kommentar, die Sie don ' T haben eine binäre Zahl im array, Sie haben eine ASCII - string. Doch, Sie versuchen, Sie zu entschlüsseln als binäre. Hinweis: es gibt keine Notwendigkeit zu überprüfen, die die Eingabe (vielleicht mit Ausnahme der Länge), wenn Sie Umgang mit binären Zahl, wie alle single-byte-Werte gültig sind.
@Ainar-G gab Ihnen eine Möglichkeit der Umwandlung von ASCII-Zahl in integer.
Vergleichen Sie diese zwei Ansätze: (http://play.golang.org/p/_wufZ4P_aE)
Diese Drucke 6611; aber schau mal hier:
Diese Drucke 909521201, also genau das was du (und nicht erwartet). Als seitliche Anmerkung, die Sie manuell decodieren Sie als BigEndian, so ist dies nicht "so eine einfache Konvertierung" am Ende, denn dort sind noch mehr Faktoren zu berücksichtigen.
Ihre handgefertigten Konvertierung von ASCII-würde sich mehr oder weniger wie folgt:
Aber mit
strconv
ist der Weg zu gehen.InformationsquelleAutor tomasz
Konvertieren Sie Ihre bytes zu string und verwenden Sie
strconv.Atoi
.Spielplatz: http://play.golang.org/p/NiobWHZ9gd
check meine Antwort.
InformationsquelleAutor Ainar-G
Hinzufügen @tomasz Antwort, wenn Sie möchten, um eine Nummer zu speichern, die in einem binären format und kümmern sich nicht um endian Typ Sie können den Zeiger verwenden:
Spielplatz
InformationsquelleAutor OneOfOne
Wenn alles, was Sie brauchen, um zu konvertieren eine einfache positive
int
Wert, kommt in einer[]byte
, wie in diesem Beispiel[]byte{'6', '6', '1', '1'}
oder[]byte{54, 54, 49, 49}
(was dasselbe ist), eine sehr einfachefor
Schleife auf der[]byte
hinzufügen zu einemint
, wird den trick tun, genau wie dieser:...und das ist alles.
Sehen, die volle Arbeits-code in der Spielplatz
v = myBytes[i] - '0'
berechnet? Was diese eigentlich tun? DankSicher, wenn Sie sehen, eine ASCII-Tabelle, das wird klar. Subtraktion ASCII '0' (48 dezimal) reduziert 48 aus dem byte-Wert. Im obigen Beispiel ASCII '6' ist eigentlich byte-54, wenn Sie sich bewegen das byte direkt an v es wird der dezimale Wert 54 byte, aber Sie sind auf der Suche für den int-Wert 6 nicht 54 richtig? dann müssen Sie subtrahieren Sie den Wert null (ASCII '0' - dezimal 48) 54-48=6 dies ist die int. Wert für den byte-54, auf dem Spielplatz spielen ein wenig und es wird klarer.
InformationsquelleAutor Victor Barrantes