大家好我在GoLang中编写了这个函数,将24位int(3个字节)转换为32位int(4个字节)
func int24ToInt32(bytes []byte) uint32 {
return binary.BigEndian.Uint32(append([]byte{0x00}, bytes...))
}
我想知道这是否是解决问题的方法。也许有人可以指导我找到更好,更有效的解决方案
答案 0 :(得分:4)
您的解决方案非常易读,可以满足您的需求,且足够快。
如果你想让它更快,你可以做一点转移或自己,
func int24ToInt32(bs []byte) uint32 {
return uint32(bs[2]) | uint32(bs[1])<<8 | uint32(bs[0])<<16
}
这没有分配,也没有像标准库那样进行边界检查。它比使用二进制包快几个数量级,但是我们正在谈论纳秒,所以是否值得追求可读性才是真正的问题。