2017-08-29 37 views
-2

嗨,大家好我在GoLang写了这个功能蒙上了24位的int(3个字节)的32位的int(4个字节)GoLang INT24来的Int32

func int24ToInt32(bytes []byte) uint32 { 
    return binary.BigEndian.Uint32(append([]byte{0x00}, bytes...)) 
} 

我想知道这是一个坏解决问题的方法。也许有人可以指导我找到更好更高效的解决方案

回答

4

你的解决方案非常可读,你想做什么,并且是足够快的

如果你想更快,你可以做的位移位和OR符号自己,

func int24ToInt32(bs []byte) uint32 { 
    return uint32(bs[2]) | uint32(bs[1])<<8 | uint32(bs[0])<<16 
} 

这种说法没有分配,并没有做边界检查,如标准库。这比使用二进制软件包快几个数量级,但是我们正在谈论纳秒,因此它是否值得打击可读性实际上是一个问题。

+0

Thx非常花时间回复,你的回答对我来说真的很有帮助。 Ps:sry for my english –