【发布时间】:2015-01-02 19:35:50
【问题描述】:
我有这个代码:
func my_function(hash string) [16]byte {
b, _ := hex.DecodeString(hash)
return b // Compile error: fails since [16]byte != []byte
}
b 的类型为[]byte。我知道hash 的长度为 32。我怎样才能使上面的代码工作? IE。我可以以某种方式从一般长度的字节数组转换为固定长度的字节数组吗?我对分配 16 个新字节并复制数据不感兴趣。
【问题讨论】:
-
就像将切片复制到数组一样? stackoverflow.com/a/21399657/6309
-
没有。我宁愿不复制。将其添加到问题中。
-
没有
unsafe就不能转换。切片头本身在 amd64 上是 24 字节,并在hex.DecodeString返回时被复制到堆栈中,并且散列本身将远比复制 16 字节结果昂贵得多;我会选择你的战斗,而不是太担心这个。
标签: go