2015-01-04 21 views

Odpowiedz

14

Można trywialnie przekonwertować dowolny array ([size] T) do plasterka ([] T) przez, uh, krojenie go:

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

Stamtąd można porównać go do plasterka jak chcesz porównaj dowolne inne dwa plasterki, np

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 
} 

Edit: Jak Dave wspomina w komentarzach, istnieje również metoda w pakiecie bytesEqual, bytes.Equal(x[:], y[:])

+2

Możesz również użyć 'bytes.Equal (x [:], y [:])' – Dave

+0

Doskonała odpowiedź Dave! – Hua2308

-2

mam odpowiedź za pomocą tego gwintu

SHA256 in Go and PHP giving different results

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

nie jest konwersja [32] bajt [] bajt, ale stosuje różne funkcje, które nie dają prądu w [32] bajt.

+1

To może nie mieć zastosowania do pierwotnego pytania, jeśli 'encoded' jest kawałek zinterpretowane bajtów . Działa tylko wtedy, gdy "kodowany" ma być interpretowany jako kodowanie base64 sumy kontrolnej. – dyoo