2016-07-30 27 views

Antwort

6

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.

4

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

+0

perfekt, mir fehlte die Besetzung zu uint16. Vielen Dank! – tt9

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ürde
numBytes := []byte{0xFF, 0x10} 
n := int(numBytes[0])<<8 + int(numBytes[1]) 
fmt.Printf("n =0x%04X = %d\n", n, n) 

Playground

EDIT: Just bemerkt, dass Sie uint16 wollte - ersetzen int damit oben!