2016-02-12 21 views

Odpowiedz

23

Konwersja pomiędzy int64 i uint64 nie zmienia bitu znaku, tylko sposób jego interpretacji.

Można użyć Uint64 i PutUint64 z prawidłowym 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) 

wyjściowa:

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

Cześć, należy użyć stałych 'MaxVarintLenXX' do określenia rozmiaru bufora przed umieścić? –

1

Kod:

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) 

wyjścia

x is: -123456789, n is: 4