概要
以下、自分用のメモです。よく忘れるのでここにメモメモ。。。
16進数、または、2進数でダンプしたいときがたまにあります。
いろいろやり方はありますが、xxdコマンド使うと楽です。
ただ、いつもオプション周りを忘れてしまう。。
16進数
$ echo -n helloworld | xxd -g 1 -c 5 00000000: 68 65 6c 6c 6f hello 00000005: 77 6f 72 6c 64 world
2進数
$ echo -n helloworld | xxd -g 1 -c 5 -b 00000000: 01101000 01100101 01101100 01101100 01101111 hello 00000005: 01110111 01101111 01110010 01101100 01100100 world
指定のバイトサイズだけ
$ echo -n helloworld | xxd -g 1 -c 5 -l 3 -b 00000000: 01101000 01100101 01101100 hel
16進数文字列をバイナリに
$ echo -n '01 02 03 04 05 ff de ad be ef' | xxd -r -p > data.bin $ wc -c data.bin 10 data.bin $ file data.bin data.bin: data $ xxd -c 10 data.bin 00000000: 0102 0304 05ff dead beef .......... $ xxd -c 10 -b data.bin 00000000: 00000001 00000010 00000011 00000100 00000101 11111111 11011110 10101101 10111110 11101111 .......... $ bat -p main.go package main import ( "encoding/hex" "fmt" "os" ) func main() { data, _ := os.ReadFile("data.bin") fmt.Printf("%v\n", data) fmt.Printf("%s\n", hex.Dump(data)) } $ go run main.go go run main.go [1 2 3 4 5 255 222 173 190 239] 00000000 01 02 03 04 05 ff de ad be ef |..........|
参考情報
man xxd (1): 16 進ダンプを作成したり、元に戻したり。
man wc (1): 各ファイルの改行数、ワード数、バイト数を表示する
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。