You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以最快速度将int64转换为[]byte?

int64 转 []byte:高性能实现方案

Go 里没法像 C 那样直接通过强制类型转换把 int64 转成 []byte,因为两者的类型语义完全不同——int64 是单个固定长度的数值类型,[]byte 是字节切片,Go 的类型系统不允许这种直接转换,所以你会看到 cannot convert t (variable of type int64) to type []byte 的报错。

如果追求极致性能,可以用 unsafe 包实现类似 C 的内存 reinterpret:

package main

import (
	"unsafe"
)

func int64ToBytesUnsafe(n int64) []byte {
	return unsafe.Slice((*byte)(unsafe.Pointer(&n)), 8)
}

这个方法直接把 int64 的内存地址转成 byte 指针,再生成长度为8的切片,性能几乎是零开销,但有几个注意点:

  • 字节序由当前系统的原生字节序决定(大端/小端),如果需要固定字节序,这个方法不适用
  • unsafe 包绕过了 Go 的类型安全检查,代码可读性差,跨平台时可能有兼容性问题,且如果后续代码错误操作切片,可能破坏原变量的内存

如果可以接受稍低一点的性能(但依然很快),且需要安全、可控制字节序的方案,用 encoding/binary 包:

package main

import (
	"encoding/binary"
)

func int64ToBytesBinary(n int64) []byte {
	b := make([]byte, 8)
	binary.LittleEndian.PutUint64(b, uint64(n)) // 或者用 binary.BigEndian 指定大端序
	return b
}

这个方法会分配固定大小的字节切片,然后按指定字节序写入数值,性能比 unsafe 略低,但完全符合 Go 的类型安全规范,代码更易维护。

内容的提问来源于stack exchange,提问作者ceving

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:42:01