ホームページ > バックエンド開発 > Golang > Go でバイト バッファから整数値を効率的に抽出するにはどうすればよいですか?

Go でバイト バッファから整数値を効率的に抽出するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-27 19:32:11
オリジナル
205 人が閲覧しました

How Can I Efficiently Extract Integer Values from a Byte Buffer in Go?

Golang でバイト バッファから整数値を抽出する

Go でバイト バッファからさまざまなフィールドを抽出するにはテクニックが必要です。 bytes.Buffer と明示的なオフセットを使用する現在のアプローチはこれを効果的に達成していますが、考慮すべき改善点がいくつかあります。

バイト スキッピングを使用した代替手段

複数のバイトの作成を排除するにはバッファの場合は、 bytes.Buffer.Next() を使用できます。メソッド:

func readSB(buf []byte) {
    p := bytes.NewBuffer(buf)

    binary.Read(p, binary.LittleEndian, &fs.sb.inodeCount)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockCount)
    p.Next(12)
    binary.Read(p, binary.LittleEndian, &fs.sb.firstDataBlock)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockSize)
    p.Next(4)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockPerGroup)
    p.Next(4)
    binary.Read(p, binary.LittleEndian, &fs.sb.inodePerBlock)
}
ログイン後にコピー

構造ベースの読み取り

別のアプローチは、ヘッダー構造を作成し、バイナリを使用することです。直接読み取ります:

type Head struct {
    InodeCount      uint32  //  0:4
    BlockCount      uint32  //  4:8
    // Skip fields
    FirstBlock      uint32  // 20:24
    BlockSize       uint32  // 24:28
    // Skip fields
    BlocksPerGroup  uint32  // 32:36
    // Skip fields
    InodesPerBlock  uint32  // 40:44
}

func readSB(buf []byte) {
    var header Head
    if err := binary.Read(bytes.NewReader(buf), binary.LittleEndian, &header); err != nil {
        log.Fatal(err)
    }

    // Access data using header fields
}
ログイン後にコピー

以上がGo でバイト バッファから整数値を効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート