バイナリファイルをソースコードに埋め込みたいことがある。
画像データを配列として使いたい場合などだ。
ファイルから読み込んで%02xなどで出力させるだけなのだが、いちいちコマンドを作るのも面倒だ。
hexdumpというコマンドがあるのでやってみたが、オプションを使えばなんとかいけそうなものの、よくわからん。
だいたい、なんで2バイトごとに出すのがデフォルトなんだ?
と、コマンドに文句を言ってもしょうがないので、オプションを調べよう。
0xを付けた出力をしたい場合は、これでよい。
これは8バイトごとに改行しているので、8/1になっている。
$ hexdump -e '8/1 "0x%02x, " "\n"' abcdef.bin
pythonで、ひたすらずらずら並べた文字列を作りたいこともある。
$ echo "$(hexdump -e '1/1 "%02x"' abcdef.bin)"
echoはなくてもよいのだけど、改行を付加しないので、コマンドラインで実行すると見づらかったのだ。
で、hexdumpを16進数の1桁ダンプ以外で使うことが無さそうなので、aliasに登録しようとした。
alias hexdump='hexdump -e '\''1/1 "%02x"'\'
いやあ、こんなに難しいとは。。
シングルクオーテーションで全体を囲む中にシングルクオーテーションを入れたい場合は、
- 一度シングルクオーテーションを閉じる
- \'を付ける
- シングルクオーテーションを始める
ということをせんといかんそうだ。
青文字がシングルクオーテーションで囲んだ範囲、赤文字がエスケープしたシングルクオーテーションとなる。
alias hexdump='hexdump -e '\''1/1 "%02x"'\'
aliasをシングルクオーテーションで囲むのは、スペースも含めて入れてほしいという場合だけのはず。
まあ、これで登録しても、aliasコマンドで見ると
alias hexdump='hexdump -e '\''1/1 "%02x"'\'''
なんだけどね。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。