2015-01-04 24 views

risposta

14

È possibile banalmente convertire qualsiasi array ([size] T) per una fetta ([] T) da, uh, affettare:

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

Da qui è possibile confrontarlo con la tua fetta come si farebbe confrontare altre due fette, ad es

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: Come Dave cita nei commenti, c'è anche un metodo Equal nel pacchetto bytes, bytes.Equal(x[:], y[:])

+2

Puoi anche usare 'bytes.Equal (x [:], y [:])' – Dave

+0

Ottima risposta Dave! – Hua2308

-2

ho avuto la risposta utilizzando questa discussione

SHA256 in Go and PHP giving different results

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

Questo non è la conversione [32] byte [] byte ma usa funzione diversa che non danno uscita in [32] byte.

+1

questo potrebbe non essere applicabile alla domanda iniziale, se 'encoded' è una fetta di byte non interpretati . Funziona solo se 'encoded' deve essere interpretato come la codifica base64 del checksum. – dyoo