テキストバイナリ変換
プログラム名 バージョン 機能 実行形式 実行ファイル |
:text2bin :0.90 :テキストバイナリ変換 :Linux :text2bin |
ダンプしたテキストデータをバイナリに変換します。
ソースファイルをコンパイルしてからお使い下さい。
有効な形式であれば、ダンプでなくてもバイナリに変換できます。
[使い方]
■$ ./text2bin の実行で簡単な説明が表示されます。
■変換したいテキストデータを用意します。(bindumpで作成可能)
■$ ./text2bin [入力ファイル名] [出力ファイル名] を実行します。
■odコマンドで確認できます。
■$ gcc -o text2bin text2bin.c でコンパイルできます。
■説明
■ソース
text2bin.c
text2bin.tar.gz(UTF-8)
ソースファイルをコンパイルしてからお使い下さい。
有効な形式であれば、ダンプでなくてもバイナリに変換できます。
[使い方]
■$ ./text2bin の実行で簡単な説明が表示されます。
■変換したいテキストデータを用意します。(bindumpで作成可能)
■$ ./text2bin [入力ファイル名] [出力ファイル名] を実行します。
■odコマンドで確認できます。
■$ gcc -o text2bin text2bin.c でコンパイルできます。
■説明
■ソース
text2bin.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #define BUF_SIZE_MAX 1024 unsigned char atouc(unsigned char); // 数値変換 int check_cd(unsigned char); // コードチェック int main(int argc, char *argv[]) { FILE *fpr, *fpw; int i, errflg; unsigned char bi, bj, bk, bl; int sptr; char sbuf[BUF_SIZE_MAX]; char fnamer[BUF_SIZE_MAX]; // 入力ファイル名 char fnamew[BUF_SIZE_MAX]; // 出力ファイル名 if (argc < 3) { printf("テキストバイナリ変換\n"); printf("使い方 : %s [入力ファイル名] [出力ファイル名]\n", argv[0]); exit (1); } // 入力ファイル名 strncpy(fnamer, argv[1], sizeof(fnamer)); // 出力ファイル名 strncpy(fnamew, argv[2], sizeof(fnamew)); fpr = NULL; fpw = NULL; // 出力ファイル存在チェック fpw = fopen (fnamew, "r"); if (fpw != NULL) { fclose(fpw); errflg = 1; } else { errflg = 0; } // 上書き確認 if (errflg != 0) { printf ("\n[%s] は存在します\n", fnamew); printf ("上書きしますか?(y or n)\n"); i = getchar(); if (i == 'y' || i == 'Y') { // printf ("上書きします\n"); } else { printf ("処理を中止します\n"); exit (1); } } // ファイルオープン(リード) fpr = fopen (fnamer, "r"); if (fpr == NULL) { printf ("ファイルリードエラー\n"); printf ("%s", fnamer); printf ("\n"); exit (1); } // ファイルオープン(ライト) fpw = fopen (fnamew, "wb"); if (fpw == NULL) { printf ("ファイルオープンエラー\n"); printf ("%s", fnamew); printf ("\n"); if (fpr != NULL) { fclose(fpr); } exit (1); } errflg = 0; // 処理開始 while( fgets( sbuf, sizeof( sbuf ), fpr ) != NULL ){ bi = sbuf[0]; if (bi != '0') { // スキップ(行頭が0なら有効) continue; } sptr = 0; do{ bi = sbuf[sptr++]; }while(bi != ' '); // スペース while (1) { bi = sbuf[sptr]; if (bi == 0 || bi == 0x0d || bi == 0x0a || sptr >= BUF_SIZE_MAX - 3) { break; // 次の行 } i = check_cd(bi); // コードチェック if (i != 0) { break; // 有効でなければ次の行 } bi = sbuf[sptr+0]; bj = sbuf[sptr+1]; bi = atouc(bi); // 数値変換 bj = atouc(bj); // 数値変換 bl = bi * 16 + bj; errflg = putc(bl, fpw); // ライト if (errflg == EOF) { break; } sptr += 3; // 次のコード } } if (errflg == EOF) { printf ("書き込みに失敗しました[%s]\n", fnamew); } else { printf ("[%s]に出力しました\n", fnamew); } // ファイルクローズ if (fpr != NULL) { fclose(fpr); } if (fpw != NULL) { fclose(fpw); } exit(0); } // 数値変換 unsigned char atouc(unsigned char bi) { unsigned char bj; if ('0' <= bi && bi <= '9') { bj = bi - '0'; } else if ('a' <= bi && bi <= 'f') { bj = bi - 'a' + 10; } else if ('A' <= bi && bi <= 'F') { bj = bi - 'A' + 10; } else { bj = 0; } return bj; } // コードチェック int check_cd(unsigned char bi) { int ret; if ('0' <= bi && bi <= '9' || 'a' <= bi && bi <= 'f' || 'A' <= bi && bi <= 'F') { ret = 0; } else { ret = -1; } return ret; } |
0 件のコメント:
コメントを投稿