mieki256's diary



2024/01/04(木) [n年前の日記]

#1 [prog] xxdというコマンドがあることを知った

先日、bin2c を使えば、バイナリファイルをC言語のヘッダーファイル(unsigned char配列)に変換できる ―― 例えばpngバイナリをC言語のヘッダーファイルにしてexeファイルの中に含めることができる、と分かったけれど。

その後ググっていたら、xxdなるツール? コマンド? があることを知った。この xxd を使っても、バイナリファイルをC言語のヘッダーファイルに変換できるらしい。

_【xxd】コマンド――ファイルを16進数でダンプする、ダンプから復元する:Linux基本コマンドTips(254) - @IT
_A-Liaison BLOG: xxd を使って画像などのバイナリデータをソースコードに含める方法

元々は vim に付属するツールだそうで、vim が入ってる環境なら xxd も一緒に入ってる可能性が高そうだなと…。

試しに使ってみた。環境は Windows10 x64 22H2 + MinGW(gcc 6.3.0) or MSYS2(gcc 13.2.0)。

xxdがある場所 :

MinGW(SourceForge版、gcc 6.3.0) には入っていた。msys 1.0 側に入っている。
> which xxd
"D:\MinGW\msys\1.0\bin\xxd.exe"

> xxd --version
xxd V1.10 27oct98 by Juergen Weigert

MSYS2 MINGW64(gcc 13.2.0) にも入っている。
$ which xxd
/usr/bin/xxd

$ xxd --version
xxd 2023-10-25 by Juergen Weigert et al.

vim に付属するツール、という話があったけど、MSYS2 の vim のパッケージ情報を眺めたら、たしかに一緒に入っていた。もし xxd が見つからなかったら、vim をインストールすると xxd も入るかもしれない。

_Package: vim - MSYS2 Packages


ちなみに、Ubuntu Linux のパッケージを調べたら、xxd というパッケージが独立して存在していた。sudo apt install xxd でインストールできそう。

C言語のヘッダーファイルとして出力 :

xxd に -i オプションをつけることで、C言語のヘッダーファイルの形で出力できるらしい。そのままだと標準出力に出力されるので、「>」を使ってファイルに書き込む。

xxd -i texture.png > texture.h

出力された内容は以下のような感じ。バイナリデータと、バイナリデータのサイズが記述されている。
unsigned char texture_png[] =
{
  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
  0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00,
// ...
  0x10, 0x01, 0xd1, 0x1a, 0x6f, 0xdc, 0xef, 0xe1, 0x00, 0x00, 0x00, 0x00,
  0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
unsigned int texture_png_len = 103208;

先日、bin2c を使って実験していたアレコレを、xxd を使って処理できるのか試してみたけど、問題なく動いてくれた。

bin2c は別途入手しないと使えないけれど、xxd ならあらかじめ入ってる環境が多そうなので、こちらを使ったほうが良さそうだなと…。

以上です。

過去ログ表示

Prev - 2024/01 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project