バイナリデータを Golang の []byte リテラル表記に変換する簡単なお仕事

  • 1
    Like
  • 0
    Comment

こんなの絶対誰かが作ってるし探せば転がってるんだろうけどググるのも面倒くさくなったので自分で作りました。

以下は README に書いた内容。まぁ実質のコードはたったこれだけで

package godump

import (
    "bytes"
    "fmt"
    "io"
)

//DumpBytes returns []bytes literal string
func DumpBytes(r io.Reader, name string) (io.Reader, error) {
    buf := new(bytes.Buffer)
    b := make([]byte, 1)
    var err error
    sep := fmt.Sprintf("var %s = []byte{", name)
    for true {
        if _, err = r.Read(b); err != nil {
            break
        }
        fmt.Fprintf(buf, "%s%#02x", sep, b)
        sep = ", "
    }
    fmt.Fprintln(buf, "}")
    return buf, nil
}

外部パッケージとして読み込む価値もないので,もし使いたいという奇特な方がおられるなら,中身見て適当にコピペしてください。

Install

$ go get github.com/spiegel-im-spiegel/godump

Installing by dep.

$ dep ensure -add github.com/spiegel-im-spiegel/godump

Usage

dump, err := godump.DumpBytes(bytes.NewBufferString("hello world"), "foobar")
if err != nil {
    return
}
io.Copy(os.Stdout, dump)
// Output:
// var foobar = []byte{0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64}

Command Line Interface

$ godump -h
Usage:
  godump [flags] [binary file]

Flags:
  -h, --help          help for godump
  -n, --name string   value name (default "dumpList")
$ echo hello world | godump -n foobar
var foobar = []byte{0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x0a}
$ cat input.txt
hello world

$ godump -n foobar input.txt
var foobar = []byte{0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64}