首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在go中将int64转换为字节数组?

如何在go中将int64转换为字节数组?
EN

Stack Overflow用户
提问于 2016-02-13 04:11:02
回答 7查看 45.9K关注 0票数 43

我有一个在int64中表示的id。如何将其转换为[]byte?我看到二进制包为uint做了这件事,但我想确保我不会破坏负数。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-02-13 04:37:44

int64uint64之间转换不会改变符号位,只会改变它的解释方式。

可以将Uint64PutUint64与正确的ByteOrder一起使用

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

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
-123456789
[235 50 164 248 255 255 255 255]
-123456789
票数 79
EN

Stack Overflow用户

发布于 2019-07-30 13:34:33

如果你不关心符号或字节顺序(例如,像映射的散列键等原因),你可以简单地移位,然后用0b11111111 (0xFF)与它们:

(假设v是一个int32)

代码语言:javascript
复制
b := [4]byte{
        byte(0xff & v),
        byte(0xff & (v >> 8)),
        byte(0xff & (v >> 16)),
        byte(0xff & (v >> 24))}

(对于int64/uint64,需要有一个长度为8的字节切片)

票数 5
EN

Stack Overflow用户

发布于 2017-12-26 20:17:17

代码:

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
x is: -123456789, n is: 4
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35371385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档