我试图将一段字节转换为整数,但它不起作用:https://play.golang.org/p/61Uhllz_qm7对于两个完全不同的字节切片,当我使用此算法时,我得到相同的:uint64func 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
2 回答
心有法竹
TA贡献1866条经验 获得超5个赞
有人可以告诉我,为什么不同的输入我得到相同的输出?
[]byte
idFromPacket
因为是 64 位(8 字节)长,而你传递的是 80 位(10 字节)。uint64
这比必要的宽度为 2 个字节。
然后读取前 8 个字节,这些字节在两个输入中都为零,并在两种情况下按预期返回您。binary.Read
0
森林海
TA贡献2011条经验 获得超2个赞
对于您的用例,您可以将函数替换为以下函数:
func idFromPacket(response []byte) uint64 {
fmt.Printf("The slice is [%v]\n", response)
var id uint64
for _, v := range response {
id <<= 8
id |= uint64(v)
}
fmt.Printf("The id is [%v]\n", id)
return id
}
- 2 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消