大家好。我遇到了一个非常奇怪的问题。(可能是因为已经过了我应该睡觉的时间,所以我忽略了一些明显的东西。)
我有一个长度为8的
我有一个长度为8的
[]byte
,这是一些十六进制解码的结果。我需要将其转换为uint64
以便使用。我尝试使用encoding/binary
中的binary.Uvarint()
来实现,但似乎只使用了数组中的第一个字节。请考虑以下示例。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)
}
当运行时,它显示num
为0
,尽管在十六进制中应该是000108000801ab01
。此外,如果从binary.Uvarint()
捕获第二个值,它是从缓冲区读取的字节数,根据我的了解,应该是8,但实际上是1。
我是否理解错了?如果是的话,我应该使用什么替代品?
谢谢大家。:)
num := binary.LittleEndian.Uint64(array)
来避免使用Read()和bytes.Buffer。 - Stephen Weinbergbinary.Read
方法可以返回一个error
,您可以进行检查。 - jimt