Edited at

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

More than 1 year has passed since last update.

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

以下は 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}