• マイページ
  • カート 0
    0 0円
  • お問合せ
バイナリデータソース化ツール

[企画・制作] ZEPエンジニアリング

本ツールの概要

  今回は、JPEG画像やWAV/mp3サウンドデータといったバイナリ・データを16進数のテキストに変換し、ソースコードの一部として利用しやすい形に自動成形(配列変数の要素として展開)するツール*1をご紹介します。

本プログラムは別記事の「ニキシー管風!M5Stackで作る 高精度Wi-Fiクロック」や「熱中症モニタ(前編)(後編)」の画像データをimage.hとしてテキストファイル化(ソースコード化)するために使用しました。
 M5Stackに限らず、あらゆるマイコン開発で利用可能です。本ツールのソースプログラムも公開していますので、自由に改版も可能です。マイコン、組込み機器開発時のツールとしてお役立てください。

 *1:同様のツールは、ウェブサービスなどにもありますが、単純にバイナリ・データを16進数テキストに変換するだけものが多く、ソースコード化するには、なんらかの後処理が必要です。

元画像とソースファイル化例(一部)

ニキシー管イメージ(JPEG)
【別記事】ニキシー管風!M5Stackで作る
高精度Wi-Fiクロック JPEGイメージ
  1. static const unsigned char image0[] = {
  2. 0xff, 0xd8, 0xff, 0xe1, 0x04, 0x1d, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x2a,
  3. 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0x01, 0x12, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
  4. 0x00, 0x00, 0x01, 0x1a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x01, 0x1b,
  5. 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6a, 0x01, 0x28, 0x00, 0x03, 0x00, 0x00,
   ●
   ● バイナリデータを配列の要素とするソースコードに変換
   ●

本ツールは、Windowsのコマンドプロンプトで動作するCUIベースのプログラムです。 

バイナリ・データのソース化ツール

基本仕様

 本ツールの仕様と動作について以下に示します。

 ・コマンド名:bin2src.exe
 ・パラメータ:入力バイナリファイル名 出力テキストファイル名 配列名(すべて省略不可)

 ・入力例:bin2src nixie0.jpg image.h image0
  ※nixie0.jpgというjpegファイルをテキスト化して、image.hというファイルに書き出す。
   書き出し形式は、配列データの要素として出力する。配列名は三番目のパラメータであるimage0。

 ・出力テキストファイルはAPPEND形式でオープンしているため、バッチファイルなどで連続実行すると
  複数のバイナリデータを1つのファイルにまとめることができる。

バッチプログラム例(別記事「ニキシー管風!M5Stackで作る 高精度Wi-Fiクロック」の数字、曜日イメージ作成に利用)

  1. bin2src 0.jpg image.h image0
  2. bin2src 1.jpg image.h image1
  3. bin2src 2.jpg image.h image2
  4. bin2src 3.jpg image.h image3
  5. bin2src 4.jpg image.h image4
  6. bin2src 5.jpg image.h image5
  7. bin2src 6.jpg image.h image6
  8. bin2src 7.jpg image.h image7
  9. bin2src 8.jpg image.h image8
  10. bin2src 9.jpg image.h image9
  11. bin2src sun.jpg image.h sun
  12. bin2src mon.jpg image.h mon
  13. bin2src tue.jpg image.h tue
  14. bin2src wed.jpg image.h wed
  15. bin2src thu.jpg image.h thu
  16. bin2src fri.jpg image.h fri
  17. bin2src sat.jpg image.h sat

プログラム解説

 本プログラムは、Windowsのコマンドプロンプトで動作するCUIプログラムです。開発環境は、MinGW-w64を使用しましたが、コンパイル済のプログラムを以下よりダウンロードできますので、本ツールを使用するだけであれば、MinGW-w64環境を準備する必要はありません。

  bin2src.exeとソースコードのダウンロードはこちら

 上記プログラムはダウンロードして自由にお使いいただけますが、本プログラム使用にかかわるトラブル等は、責任を負いませんので、自己責任でお使いください。


bin2src.cプログラムリスト

  1. // Binary to source file converter.
  2. // Copyright (c) 2022- @logic_star
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #define BYTES_PER_LINE 16    //1ライン中のバイト数
  6. int main(int argc, char *argv[]){
  7. int        ch, i, temp;
  8. FILE    *fi, *fo;
  9.     if(argc != 4){    //コマンドラインのパラメータ数チェック
  10.         printf("Invalid parameter.\n");
  11.         return(1);
  12.     }
  13.     fi = fopen(argv[1], "rb");    //入力ファイルをオープン
  14.     if(fi == NULL)    return(2);    //ファイルオープン出来ないときエラー
  15.     fo = fopen(argv[2], "a+");    //出力ファイルをオープン
  16.     if(fo == NULL){        //オープン出来ないときにエラー
  17.         fclose(fi);
  18.         return(3);
  19.     }
  20.     fprintf(fo, "static const unsigned char %s[] = {\n", argv[3]);    //配列名出力
  21.     i = 0;
  22.     while((ch = fgetc(fi)) != EOF){    //EOFになるまで16進数に変換して出力
  23.         fprintf(fo, "0x%02x", ch);
  24.         i++;
  25.         if((temp = fgetc(fi)) == EOF)    fprintf(fo, "\n");
  26.         else{
  27.             ungetc(temp, fi);
  28.             fprintf(fo, ", ");
  29.             if(i == BYTES_PER_LINE){
  30.                 i = 0;
  31.                 fprintf(fo, "\n");
  32.             }
  33.         }
  34.     }
  35.     fprintf(fo, "};\n");
  36.     fclose(fi);    //ファイルクローズして終了
  37.     fclose(fo);
  38.     return 0;
  39. }
  • 6行目 1ライン当たりのバイト数を定義
  • 12~22行目 コマンドラインパラメータのチェック
  • 24~39行目 バイナリデータを16進数に変換して出力
  • 40~43行目 ファイルをクローズして処理終了

MinGW-w64環境の構築

 MinGW-w64環境を構築したい方のために簡単に手順を記述します。

 1.MinGW-w64のダウンロードのページの中ほどにある、MingW-W64-buildsのリンクをクリック
 2.関連GitHubへのリンク「Mingw-builds Installation: GitHub」がありますので、クリックして移動
 3.そこから最新のファイル(2022/8/8時点では) 「x86_64-12.1.0-release-posix-seh-rt_v10-rev3.7z」をダウンロード
 4.上記ファイルを7-zip等のツールを利用して解凍
 5.解凍してできたフォルダ全体をわかりやすい場所(例えばc:\MinGW)にコピー
 6.上記場所にパスを通す(Windowsの環境変数PATHを操作(Windowsの検索窓で「システム環境変数の編集」と入力))
 7.コマンドプロンプトを開き「gcc -v[Enter]」を入力し動作を確認
 8.本プログラムのコンパイルは、「gcc -o bin2src bin2src.c[Enter]」で行える

まとめ

 組み込み機器のソフトウェア開発において、ちょっとしたツールがとても便利だったりします。GUIベースのツールを作るのは大変ですが、Windowsのコマンドプロンプトで動作するCUIベースのツールであればささっと作ることができます。gccのコンパイル環境もMinGW-w64であれば簡単に構築できます。便利ツール作ってみませんか。

c2022ー @logic_star All rights reserved.



Page Top