簡體   English   中英

Go中更慣用的方式將[] byte slice編碼為int64嗎?

[英]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)
}

http://play.golang.org/p/VjaqeFkgBX

您可以使用編碼/二進制的ByteOrder16、32、64位類型執行此操作

package main

import "fmt"
import "encoding/binary"

func main() {
    var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
    data := binary.BigEndian.Uint64(mySlice)
    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)
}

http://play.golang.org/p/MTyy5gIEp5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM