Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在go中将int64转换为字节数组?_Go_Casting - Fatal编程技术网

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

如何在go中将int64转换为字节数组?,go,casting,Go,Casting,我有一个id,它表示为int64。如何将其转换为[]字节?我看到二进制软件包对UINT执行此操作,但我想确保不会中断负数。在int64和uint64之间转换不会改变符号位,只会改变符号位的解释方式 您可以将Uint64和PutUint64与正确的 输出: -123456789 [235 50 164 248 255 255 255 255] -123456789 守则: var num int64 = -123456789 // convert int64 to []byte buf :=

我有一个id,它表示为
int64
。如何将其转换为
[]字节
?我看到二进制软件包对UINT执行此操作,但我想确保不会中断负数。

int64
uint64
之间转换不会改变符号位,只会改变符号位的解释方式

您可以将
Uint64
PutUint64
与正确的

输出:

-123456789
[235 50 164 248 255 255 255 255]
-123456789
守则:

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)
输出

x is: -123456789, n is: 4
您也可以使用此选项:

var num int64 = -123456789

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

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

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

如果您不关心符号或尾数(例如,对映射的哈希键等原因),您可以简单地移位位,然后使用0b11111111(0xFF)将其和:

(假设v是一个int32)

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

在库中,您可以使用方法PutVariant([]字节,int64)从int64传输到字节,以及Variant([]字节)从字节传输到int64,而无需进一步强制转换。此代码在


您好,我是否应该使用常量
maxvarientlenxx
在put之前确定缓冲区的大小?否,
PutUint64
使用固定长度编码。当使用
PutVarint
时,您只需要
maxVarinternxx
。b:=buf[:n]行的作用是什么?@JohnBalvinArias:这是因为本例使用可变长度编码
num is: [45 49 50 51 52 53 54 55 56 57], in string is: -123456789
b := [4]byte{
        byte(0xff & v),
        byte(0xff & (v >> 8)),
        byte(0xff & (v >> 16)),
        byte(0xff & (v >> 24))}
buf := make([]byte, 8)

var toBytes int64 = 900
fmt.Printf("toBytes:%d\n", toBytes)

binary.PutVarint(buf, toBytes)
fmt.Printf("buffer:%v\n", buf[:])

fromBytes, _ := binary.Varint(buf)
fmt.Printf("fromBytes:%d\n", fromBytes)