我試圖將一段字節轉換為整數,但它不起作用: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 關注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消