Я хочу сравнить вывод sha256.Sum256(), который составляет [32] байта с [] байтом.
Я получаю сообщение об ошибке "несовпадающие типы [32]byte и []byte". Я не могу преобразовать [] байт в [32] байт.
Есть ли способ сделать это?
Я хочу сравнить вывод sha256.Sum256(), который составляет [32] байта с [] байтом.
Я получаю сообщение об ошибке "несовпадающие типы [32]byte и []byte". Я не могу преобразовать [] байт в [32] байт.
Есть ли способ сделать это?
Вы можете тривиально преобразовать любой массив ([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
}
Редактировать: как Дейв упоминает в комментариях, в пакете bytes
также есть метод Equal
, bytes.Equal(x[:], y[:])
bytes.Equal(x[:], y[:])
- person Dave; 09.08.2015
Я получил ответ, используя эту тему
SHA256 в Go и PHP дает разные результаты
converted := []byte(raw)
hasher := sha256.New()
hasher.Write(converted)
return hex.EncodeToString(hasher.Sum(nil)) == encoded
Это не преобразование [32] байта в [] байт, но используется другая функция, которая не выдает результат в [32] байте.
encoded
представляет собой фрагмент неинтерпретированных байтов. Это работает только в том случае, если encoded
следует интерпретировать как base64-кодировку контрольной суммы.
- person dyoo; 04.01.2015