いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

xxdコマンドで16進数と2進数出力する

概要

以下、自分用のメモです。よく忘れるのでここにメモメモ。。。

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): 各ファイルの改行数、ワード数、バイト数を表示する


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。