[英]More idiomatic way in Go to encode a []byte slice int an int64?
Go中有沒有更好或更慣用的方式將[] byte slice編碼為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)
}
使用binary.BigEndian
幾乎是binary.BigEndian
,因為它的代碼量非常小,而且能夠准確地看到正在發生的事情,從而獲得了一定的清晰度。 但是,這是一個極具爭議的觀點,因此您自己的口味和判斷可能會有所不同。
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)
}
我不確定慣用語言,但是這是使用encoding / binary包的替代方法:
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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.