web-dev-qa-db-fra.com

Comment puis-je convertir un int64 en tableau d'octets au go?

J'ai un identifiant qui est représenté par un int64. Comment puis-je convertir ceci en un []byte? Je vois que le paquet binaire le fait pour des idées, mais je veux m'assurer de ne pas casser les nombres négatifs.

16
Charles L.

La conversion entre int64 et uint64 ne modifie pas le bit de signe, mais la façon dont il est interprété. 

Vous pouvez utiliser Uint64 et PutUint64 avec le bon 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)

sortie:

-123456789
[235 50 164 248 255 255 255 255]
-123456789
35
JimB

Le code:

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)

les sorties

x is: -123456789, n is: 4
2
sgon00

Vous pouvez aussi utiliser ceci:

var num int64 = -123456789

b := []byte(strconv.FormatInt(num, 10))

fmt.Printf("num is: %v, in string is: %s", b, string(b))

Sortie:

num is: [45 49 50 51 52 53 54 55 56 57], in string is: -123456789
1
Jonathan Hecl