簡體   English   中英

Go - 將 2 字節數組轉換為 uint16 值

[英]Go - Convert 2 byte array into a uint16 value

如果我在 Go 中有一段字節,類似於:

numBytes := []byte { 0xFF, 0x10 }

我如何將它轉換為它的uint16值(0xFF10,65296)?

你可以使用binary.BigEndian.Uint16(numBytes)
像這個工作示例代碼(帶注釋輸出):

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
}

並查看binary.BigEndian.Uint16(b []byte)內部binary.BigEndian.Uint16(b []byte)

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
}

我希望這有幫助。

將兩個字節組合成uint16

x := uint16(numBytes[i])<<8 | uint16(numBytes[i+1])

其中i是uint16的起始位置。 因此,如果你的數組總是只有兩個項,那就是x := uint16(numBytes[0])<<8 | uint16(numBytes[1]) x := uint16(numBytes[0])<<8 | uint16(numBytes[1])

首先,你有一個切片而不是一個數組 - 一個數組有一個固定的大小,並將被聲明為這個[2]byte

如果你只有一個2字節的切片,我不會做任何花哨的事情,我只是這樣做

numBytes := []byte{0xFF, 0x10}
n := int(numBytes[0])<<8 + int(numBytes[1])
fmt.Printf("n =0x%04X = %d\n", n, n)

操場

編輯 :剛剛注意到你想要uint16 - 用上面的替換int

*(*uint16)(unsafe.Pointer(&numBytes[0])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM