テキストバイナリ変換
| プログラム名 バージョン 機能 実行形式 実行ファイル |
: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 件のコメント:
コメントを投稿