Is there a better or more idiomatic way in Go to encode a []byte slice into an int64?
package main
import "fmt"
func main() {
var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
var data int64
for i := 0; i < 8; i++ {
data |= int64(mySlice[i] & byte(255)) << uint((8*8)-((i+1)*8))
}
fmt.Println(data)
}
It's almost overkill to use binary.BigEndian
, since it's such a tiny amount of code, and there's some clarity gained by being able to see exactly what's going on. But this is a highly contentious opinion, so your own taste and judgement may differ.
func main() {
var mySlice = []byte{123, 244, 244, 244, 244, 244, 244, 244}
data := uint64(0)
for _, b := range mySlice {
data = (data << 8) | uint64(b)
}
fmt.Printf("%x\n", data)
}
I'm not sure about idiomatic, but here's an alternative using the encoding/binary package:
package main
import (
"bytes"
"encoding/binary"
"fmt"
)
func main() {
var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
buf := bytes.NewReader(mySlice)
var data int64
err := binary.Read(buf, binary.LittleEndian, &data)
if err != nil {
fmt.Println("binary.Read failed:", err)
}
fmt.Println(data)
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.