2015-01-04 34 views

Trả lời

14

Bạn trivially có thể chuyển đổi bất kỳ mảng ([size] T) để một lát ([] T) bằng cách, uh, chém nó:

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

Từ đó bạn có thể so sánh nó với miếng của bạn như bạn sẽ so sánh bất kỳ hai lát khác, ví dụ

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: Theo Dave đề cập trong các ý kiến, cũng có một phương pháp Equal trong gói bytes, bytes.Equal(x[:], y[:])

+2

Bạn cũng có thể sử dụng 'bytes.Equal (x [:], y [:])' – Dave

+0

Câu trả lời tuyệt vời Dave! – Hua2308

-2

tôi có câu trả lời sử dụng chủ đề này

SHA256 in Go and PHP giving different results

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

này không được chuyển đổi [32] byte tới [] byte nhưng nó được sử dụng chức năng khác nhau mà không đưa ra trong [32] byte.

+1

này có thể không áp dụng đối với câu hỏi ban đầu, nếu 'encoded' là một lát byte uninterpreted . Nó chỉ hoạt động nếu 'được mã hóa' được hiểu là mã hóa base64 của tổng kiểm tra. – dyoo

Các vấn đề liên quan