2016-02-12 32 views

回答

23

int64uint64之間的轉換不會改變符號位,只會改變它的解釋方式。

您可以使用Uint64PutUint64用正確ByteOrder

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

i := int64(-123456789) 

fmt.Println(i) 

b := make([]byte, 8) 
binary.LittleEndian.PutUint64(b, uint64(i)) 

fmt.Println(b) 

i = int64(binary.LittleEndian.Uint64(b)) 
fmt.Println(i) 

輸出:

-123456789 
[235 50 164 248 255 255 255 255] 
-123456789 
+0

嗨,我應該使用常量'MaxVarintLenXX'來確定放置之前的緩衝區大小嗎? –

1

代碼:

var num int64 = -123456789 

// convert int64 to []byte 
buf := make([]byte, binary.MaxVarintLen64) 
n := binary.PutVarint(buf, num) 
b := buf[:n] 

// convert []byte to int64 
x, n := binary.Varint(b) 
fmt.Printf("x is: %v, n is: %v\n", x, n) 

輸出

x is: -123456789, n is: 4