More idiomatic way in Go to encode a []byte slice int an int64?

后端 未结 3 1393
[愿得一人]
[愿得一人] 2021-02-15 03:16

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, 2         


        
相关标签:
3条回答
  • 2021-02-15 03:39

    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)
    }
    

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

    0 讨论(0)
  • 2021-02-15 03:45

    You can use encoding/binary's ByteOrder to do this for 16, 32, 64 bit types

    Play

    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)
    }
    
    0 讨论(0)
  • 2021-02-15 03:58

    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)
    }
    
    0 讨论(0)
提交回复
热议问题