Go 如何将[]字节转换为[16]字节?
我有以下代码:Go 如何将[]字节转换为[16]字节?,go,Go,我有以下代码: func my_function(hash string) [16]byte { b, _ := hex.DecodeString(hash) return b // Compile error: fails since [16]byte != []byte } b的类型将为[]字节。我知道hash的长度是32。我怎样才能使我上面的代码工作?我可以从一般长度的字节数组转换为固定长度的字节数组吗?我对分配16个新字节并复制数据不感兴趣。没有直接的方法将切片转换
func my_function(hash string) [16]byte {
b, _ := hex.DecodeString(hash)
return b // Compile error: fails since [16]byte != []byte
}
b
的类型将为[]字节
。我知道hash
的长度是32。我怎样才能使我上面的代码工作?我可以从一般长度的字节数组转换为固定长度的字节数组吗?我对分配16个新字节并复制数据不感兴趣。没有直接的方法将切片转换为数组。不过,你可以复印一份
var ret [16]byte
copy(ret[:], b)
标准库使用[]字节,如果您坚持使用其他内容,那么您将需要进行更多的键入。我写了一个程序,用数组来表示我的md5值,我后悔了。就像把一个切片复制到一个数组一样?不,我不想抄袭。在问题中添加了这一点。如果没有
不安全
,则无法转换。切片头本身在amd64上是24个字节,当hex.DecodeString
返回时被复制到堆栈中,而散列本身要比复制16个字节的结果昂贵得多;我会选择你的战斗,不要太担心这个。请注意,你通常可以通过对数组变量进行切片(例如,foo[:]
)来确保你收到的数据最终进入数组变量。当您出于性能原因想要实际使用数组,但仍然希望将Read()
和Write()
写入数组时,这非常有用。