ホームページ >バックエンド開発 >Golang >Go でバイトスライスを int64 に効率的にエンコードするにはどうすればよいですか?

Go でバイトスライスを int64 に効率的にエンコードするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-05 14:03:10632ブラウズ

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

Go での効率的なバイト スライス エンコーディング

慣用的なアプローチを使用して、Go でバイト スライスを int64 にエンコードするにはどうすればよいでしょうか?次のコード スニペットを考えてみましょう:

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)
}

このコードはタスクを達成しますが、同じ結果を達成するためのより簡潔で洗練された方法はありますか?

慣用的な解決策

バイトスライスを int64 にエンコードするより慣用的な方法を以下に示します。 code:

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)
}

このソリューションでは、範囲演算子を利用してバイト スライスの要素を反復処理し、ビット単位の左シフト演算子 (<<) を使用して値を効率的に蓄積します。 int64.

慣用句の長所アプローチ

  • シンプルさ: ビット操作や複雑な計算が回避されるため、ループはよりシンプルで読みやすくなります。
  • 保守性: コレクションを反復して蓄積する一般的なパターンに従っているため、将来の維持と拡張がより簡単になります。
  • 効率: その単純さにも関わらず、コードは依然として効率的であり、時間と空間の複雑さは元のアプローチと同等です。

結論

特定のビット操作操作に関しては元のコード スニペットの方が明確かもしれませんが、慣用的なアプローチは、より簡潔でエレガントで、保守しやすいものです。ほとんどの場合、Go でバイト スライスを int64 にエンコードするには、慣用的な解決策が推奨されます。

以上がGo でバイトスライスを int64 に効率的にエンコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。