3 回答

TA贡献1757条经验 获得超7个赞
一种选择是按照问题中的建议附加各个字节。多个append调用可以合并为一个调用:
s = append(s, byte(u), byte(u>>8), byte(u>>16), byte(u>>24))
二进制包也可以按照问题所示使用:
var b [4]byte
binary.LittleEndian.PutUint32(b[:], u)
s = append(s, b[:]...)
在 Go 游乐场上运行它。
最后一个片段应该b在堆栈上分配。如果没有,则可以使用以下代码避免额外的堆分配:
s = append(s, " "...) // append four bytes (the values don't matter)
binary.LittleEndian.PutUint32(s[len(s)-4:], u) // overwrite those bytes with the uint32

TA贡献1784条经验 获得超7个赞
编码/二进制具有您需要的功能:
import "encoding/binary"
b := make([]byte,4)
binary.LittleEndian.PutUint32(b, u)
s = append(s, b)

TA贡献1946条经验 获得超4个赞
有不安全的(实际上是安全的,如果你只复制它的字节)方法来获取任何原语的字节表示:
const sizeUInt32 = int(unsafe.Sizeof(uint32(0)))
func GetBytesUInt32(i *uint32) []byte {
return (*[1 << 30]byte)(unsafe.Pointer(i))[:sizeUInt32:sizeUInt32]
}
https://play.golang.org/p/WPC5jeYLDth
创建的切片将携带传递的 int 存储,因此通过对其进行操作,请记住 uint32 值也将被更改。
嘿,没有讨论怎么讨厌?我意识到你们不喜欢不安全的代码,而且我意识到这样的答案不适合recommended way哪个主题启动器寻找......但我认为像 stackoverflow 这样的地方应该提供所有可能的方法来实现人们在谷歌上搜索的东西。
- 3 回答
- 0 关注
- 180 浏览
添加回答
举报