Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh mengekod kepingan bait dengan cekap ke dalam int64 dalam Go?

Bagaimanakah saya boleh mengekod kepingan bait dengan cekap ke dalam int64 dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-05 14:03:10635semak imbas

How can I efficiently encode a byte slice into an int64 in Go?

Pengekodan Slice Byte yang Cekap dalam Go

Bagaimanakah anda boleh mengekod kepingan bait ke dalam int64 dalam Go menggunakan pendekatan idiomatik? Pertimbangkan coretan kod berikut:

import "fmt"

func main() {
    var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
    var data int64
    for i := 0; i < 8; i++ {
                data |= int64(mySlice[i] & byte(255)) << uint((8*8)-((i+1)*8))
    }
    fmt.Println(data)
}

Semasa kod ini menyelesaikan tugas, adakah cara yang lebih ringkas dan elegan untuk mencapai hasil yang sama?

Penyelesaian Idiomatik

Cara yang lebih idiomatik untuk mengekod kepingan bait ke dalam int64 disediakan dalam perkara berikut kod:

func main() {
    var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
    data := int64(0)
    for _, b := range mySlice {
        data = (data << 8) | int64(b)
    }
    fmt.Printf("%d\n", data)
}

Dalam penyelesaian ini, kami menggunakan operator julat untuk mengulangi elemen kepingan bait dan menggunakan operator anjakan kiri bitwise (<<) untuk mengumpul nilai dengan cekap ke dalam int64.

Kebaikan Idiomatik Pendekatan

  • Kesederhanaan: Gelung lebih ringkas dan mudah dibaca, kerana ia mengelakkan manipulasi bit dan pengiraan yang rumit.
  • Kebolehselenggaraan: Ia lebih mudah untuk dikekalkan dan dilanjutkan pada masa hadapan, kerana ia mengikut corak biasa lelaran pada koleksi dan nilai terkumpul.
  • Kecekapan: Walaupun ringkas, kod ini masih cekap, dengan kerumitan masa dan ruang yang setanding dengan pendekatan asal.

Kesimpulan

Walaupun coretan kod asal mungkin lebih jelas dari segi operasi manipulasi bit tertentu, pendekatan idiomatik adalah lebih ringkas, elegan, dan boleh diselenggara. Untuk kebanyakan kes, penyelesaian idiomatik ialah pilihan pilihan untuk mengekodkan kepingan bait ke dalam int64 dalam Go.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengekod kepingan bait dengan cekap ke dalam int64 dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn