全部。我遇到了似乎是一個非常奇怪的問題。 (這可能是我應該睡着的時候已經過去了,而且我忽略了一些明顯的東西。)將[8]字節轉換爲uint64
我有一個[]byte
,由於十六進制解碼的結果,它的長度爲8。我需要製作一個uint64
才能使用它。我嘗試使用binary.Uvarint()
,從encoding/binary
這樣做,但它似乎只使用數組中的第一個字節。考慮下面的例子。
package main
import (
"encoding/binary"
"fmt"
)
func main() {
array := []byte{0x00, 0x01, 0x08, 0x00, 0x08, 0x01, 0xab, 0x01}
num, _ := binary.Uvarint(array[0:8])
fmt.Printf("%v, %x\n", array, num)
}
Here it is on play.golang.org.
時運行,它會顯示num
爲0
,即使在十六進制,它應該是000108000801ab01
。此外,如果從binary.Uvarint()
獲得第二個值,它是從緩衝區讀取的字節數,據我所知,應該是8,即使它實際上是1.
我解釋這個錯誤嗎?如果是這樣,我應該用什麼來代替?
謝謝,你們都。 :)
你能避免read()和bytes.Buffer通過只是在做'NUM:= binary.LittleEndian.Uint64(陣列)' –
@StephenWeinberg +1我不知道。我更換了我的解決方案以使用您的清潔劑。 –
需要注意的是,如果輸入緩衝區不夠大,無法容納完整請求的數據類型,這些快捷方式將會出現混亂。使用'binary.Read'方法給你一個'error'返回你可以檢查。 – jimt