如何将 [] 字节转换为整数

我试图将一段字节转换为整数,但它不起作用:


https://play.golang.org/p/61Uhllz_qm7


对于两个完全不同的字节切片,当我使用此算法时,我得到相同的:uint64


func idFromPacket(response []byte) uint64 {

    fmt.Printf("The slice is [%v]\n", response)

    var id uint64

    reader := bytes.NewReader(response)

    binary.Read(reader, binary.BigEndian, &id)

    fmt.Printf("The id is [%d]\n", id)

    return id

}

有人可以告诉我,为什么不同的输入我得到相同的输出?[]byteidFromPacket


Helenr
浏览 107回答 2
2回答

心有法竹

有人可以告诉我,为什么不同的输入我得到相同的输出?[]byteidFromPacket因为是 64 位(8 字节)长,而你传递的是 80 位(10 字节)。uint64这比必要的宽度为 2 个字节。然后读取前 8 个字节,这些字节在两个输入中都为零,并在两种情况下按预期返回您。binary.Read0

森林海

对于您的用例,您可以将函数替换为以下函数:func idFromPacket(response []byte) uint64 {&nbsp; &nbsp; fmt.Printf("The slice is [%v]\n", response)&nbsp; &nbsp; var id uint64&nbsp; &nbsp; for _, v := range response {&nbsp; &nbsp; &nbsp; &nbsp; id <<= 8&nbsp; &nbsp; &nbsp; &nbsp; id |= uint64(v)&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Printf("The id is [%v]\n", id)&nbsp; &nbsp; return id}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go