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.
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
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
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