👫
Goでバイトリーダー
はじめに
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はバイナリデータ扱うのも楽。素晴らしい。
Discussion