Go:Varint返回的值不同于read

时间:2015-02-16 20:41:17

标签: encoding go

为什么binary.Varint返回的结果与binary.Read不同?

package main

import "fmt"
import "encoding/binary"
import "bytes"

func main() {
    b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}
    var i1 int64

    buf := bytes.NewBuffer(b)
    binary.Read(buf, binary.LittleEndian, &i1)
    fmt.Printf("%s, %d\n", i1, i1)

    i2, _ := binary.Varint(b)
    fmt.Printf("%s, %d\n", i2, i2)
}

返回:

  

%!s(int64 = 4614256656552045848),4614256656552045848
  %!s(int64 = 12),12

以下是游乐场的链接:https://play.golang.org/p/vlrl_CHq0v

1 个答案:

答案 0 :(得分:3)

Varint是一种特定的编码,这意味着它从文件中读出的字节值不是实际的整数值,而是编码。另一方面,读取只是按照传递给它的字节顺序读取字节。