👫

Goでバイトリーダー

2021/11/14に公開

はじめに

Goで、bytes.Readerとかbinary.Read()とか使ったのでメモ。
(タイトルはバイトリーダーって言ってみたかっただけ。)

バイナリファイルを読み込んで構造体に詰める

なんか、こんな感じで構造体を用意して、binary.Read()したらいい感じに詰めてくれる。続けて、別の構造体にbinary.Read()したらいい感じにバイナリデータのつづきから読み取ってくれる。
エンディアンもさらっと指定できる。
適当に切り貼りしたから、もしかしたらそのままでは動かないかも。。。

package hoge

import (
	"bytes"
	"encoding/binary"
	"io"
	"os"
)

type (
	Data struct {
		Hoge uint8
		Fuga uint8
	}
)
func hoge(path string) (*Data, error) {
	file, err := os.Open(path)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	buf, err := io.ReadAll(file)
	if err != nil {
		return nil, err
	}
	byteReader := bytes.NewReader(buf)

	var data Data
	err := binary.Read(byteReader, binary.BigEndian, &data)
	if err != nil {
		return nil, err
	}
    return &data, nil
}

終わりに

Goはバイナリデータ扱うのも楽。素晴らしい。

参考

binary package - encoding/binary - pkg.go.dev

GitHubで編集を提案

Discussion