如何在golang中比较[32]字节和[]字节?

时间:2015-01-04 05:00:26

标签: go sha256

我想比较sha256.Sum256()的输出,它是[32]字节和[]字节。

我收到错误“不匹配的类型[32]字节和[]字节”。我无法将[]字节转换为[32]字节。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:22)

你可以通过切片将任何数组([size] T)平滑地转换为切片([] T):

x := [32]byte{}
slice := x[:] // shorthand for x[0:len(x)]

从那里你可以将它与你的切片进行比较,就像比较任何其他两个切片一样,例如

func Equal(slice1, slice2 []byte) bool {
    if len(slice1) != len(slice2) {
        return false
    }

    for i := range slice1 {
        if slice1[i] != slice2[i] {
            return false
        }
    }

    return true
}

修改:正如Dave在评论中提到的那样,Equal包中还有一个bytes方法,bytes.Equal(x[:], y[:])

答案 1 :(得分:-3)

我使用这个帖子得到了答案

SHA256 in Go and PHP giving different results

    converted := []byte(raw)
    hasher := sha256.New()
    hasher.Write(converted)
    return hex.EncodeToString(hasher.Sum(nil)) == encoded

这不是将[32]字节转换为[]字节,而是使用不同的函数,它们不以[32]字节给出输出。