2016-02-12 11 views

risposta

23

La conversione tra int64 e uint64 non modifica il bit di segno, solo il modo in cui è interpretato.

È possibile utilizzare Uint64 e PutUint64 con la corretta 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) 

uscita:

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

Ciao, devo usare le costanti 'MaxVarintLenXX' per determinare la dimensione del buffer prima di mettere? –

1

Il codice:

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) 

uscite

x is: -123456789, n is: 4 
Problemi correlati