Wenn ich ein Stück von Bytes in Go, ähnlich wie diesen:Go - Convert 2-Byte-Array in einen uint16 Wert
numBytes := []byte { 0xFF, 0x10 }
Wie würde ich es, um es zu konvertieren ist uint16
Wert (0xFF10, 65296)?
Wenn ich ein Stück von Bytes in Go, ähnlich wie diesen:Go - Convert 2-Byte-Array in einen uint16 Wert
numBytes := []byte { 0xFF, 0x10 }
Wie würde ich es, um es zu konvertieren ist uint16
Wert (0xFF10, 65296)?
können Sie binary.BigEndian.Uint16(numBytes)
wie dieser Arbeitsbeispielcode (mit kommentierten Ausgabe) verwenden:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
numBytes := []byte{0xFF, 0x10}
u := binary.BigEndian.Uint16(numBytes)
fmt.Printf("%#X %[1]v\n", u) // 0XFF10 65296
}
und innen binary.BigEndian.Uint16(b []byte)
sehen:
func (bigEndian) Uint16(b []byte) uint16 {
_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808
return uint16(b[1]) | uint16(b[0])<<8
}
Ich hoffe, das hilft.
So kombinieren zwei Bytes in uint16
x := uint16(numBytes[i])<<8 | uint16(numBytes[i+1])
wo i
die Startposition des uint16 ist. Also, wenn Ihr Array immer nur zwei Elemente ist, wäre es x := uint16(numBytes[0])<<8 | uint16(numBytes[1])
Erstens haben Sie eine Scheibe nicht ein Array - ein Array hat eine feste Größe und würde wie folgt [2]byte
deklariert werden.
Wenn Sie nur 2 Bytes Scheibe haben, würde ich alles tun, nichts Besonderes, ich nur
tun würdenumBytes := []byte{0xFF, 0x10}
n := int(numBytes[0])<<8 + int(numBytes[1])
fmt.Printf("n =0x%04X = %d\n", n, n)
EDIT: Just bemerkt, dass Sie uint16
wollte - ersetzen int
damit oben!
perfekt, mir fehlte die Besetzung zu uint16. Vielen Dank! – tt9