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

How to compare [32]byte with []byte in golang?

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

我遇到错误 "mismatched types [32]byte and []byte"。我无法将 []byte 转换为 [32]byte。

有办法吗?

我使用这个线程得到了答案

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]byte 转换为 []byte,而是使用不以 [32]byte 为单位输出的不同函数。

您可以通过切片将任何数组 ([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 在评论中提到的,bytes 包中还有一个 Equal 方法,bytes.Equal(x[:], y[:])