表示レイアウト(フォーマット)文字列指定ダンプ
プログラム名 バージョン 機能 実行形式 実行ファイル OS |
:DumpStrLayout :0.90 :表示レイアウト(フォーマット)文字列指定ダンプ :Windows :DumpStrLayout.exe :Windows |
1行のレイアウト(フォーマット)を数字文字列で指定し、アドレスなしでダンプします。
ファイルにする場合はリダイレクトをお使い下さい。
[使い方]
■DumpStrLayout.exe の実行で簡単な説明が表示されます。
■指定したレイアウトでバイナリデータが表示されます。
■テスト用データ
■ソース
DumpStrLayout.c DumpStrLayout.zip
ファイルにする場合はリダイレクトをお使い下さい。
[使い方]
■DumpStrLayout.exe の実行で簡単な説明が表示されます。
■指定したレイアウトでバイナリデータが表示されます。
■テスト用データ
■ソース
DumpStrLayout.c DumpStrLayout.zip
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PATH_LEN 4096 #define MAX_LAYOUT_LEN 32 char fname[MAX_PATH_LEN]; // 入力ファイル名 char str_layout[MAX_LAYOUT_LEN]; // レイアウト文字列 unsigned char uc; int ct, rec_max, endian; FILE *fpr; // プロトタイプ int layout_str_check(char*); // 表示レイアウト(フォーマット)文字列チェック int dump(int); // ダンプ int main(int argc, char *argv[]) { int idx; errno_t err; if (argc < 4) { printf("表示レイアウト(フォーマット)文字列指定ダンプ\n"); printf ("使い方:DumpStrLayout [入力ファイル名] \n"); printf (" [バイトオーダー:-L or -B] \n"); printf (" [レイアウト(数字文字列)]\n"); printf ("1行のレイアウト(フォーマット)を数字文字列で指定し、アドレスなしでダンプします\n"); printf ("レイアウト(数字文字列)の説明\n"); printf (" 1 - 1バイト\n"); printf (" 2 - 2バイト\n"); printf (" 4 - 4バイト\n"); printf (" 8 - 8バイト\n"); printf ("[例]\n"); printf ("C:\\>DumpStrLayout TEST.bin -B 112444\n"); exit (0); } // エンディアンチェック if (strcmp(argv[2], "-l") == 0 || strcmp(argv[2], "-L") == 0) { endian = 0; } else if (strcmp(argv[2], "-b") == 0 || strcmp(argv[2], "-B") == 0) { endian = 1; } else { printf("エンディアンは -l か -L か -b か -B で 指定して下さい\n"); exit (1); } // 表示レイアウト(フォーマット)文字列数チェック if (strlen(argv[3]) > MAX_LAYOUT_LEN-2) { printf("表示レイアウト(フォーマット)文字列は%d文字以下で指定して下さい\n", MAX_LAYOUT_LEN-2); exit (1); } strncpy(str_layout, argv[3], sizeof(str_layout)); // 表示レイアウト(フォーマット)文字列チェック if (layout_str_check(str_layout)) { printf("表示レイアウト(フォーマット)文字列は [1 or 2 or 4 or 8] で指定して下さい\n"); exit (1); } // ファイル名セット strncpy(fname, argv[1], sizeof(fname)); fname[MAX_PATH_LEN-1] = 0; // ガード fpr = NULL; // ファイルオープン err = fopen_s (&fpr, fname, "rb"); if (err != 0) { printf( "ファイルオープンエラー\n" ); printf(fname); printf("\n"); exit (1); } ct = 0; // カウンタ idx = 0; // インデックス // 処理開始 while (1) { uc = str_layout[idx++]; if (uc == 0) { idx = 0; printf("\n"); continue; } if (!dump((int)(uc - 0x30))) { break; } } // ファイルクローズ if (fpr != NULL) { fclose(fpr); } exit (0); } // ダンプ int dump(int isize) { int i, j, iRet; unsigned char num_buf[8]; memset(num_buf, 0, sizeof(num_buf)); iRet = 1; for ( i = 0 ; i < isize ; i++ ) { j = fgetc(fpr); if (j == EOF) { iRet = 0; if (i == 0) { return iRet; } break; } num_buf[i] = (unsigned char)j; } if (endian == 0) { // ビッグエンディアン for ( i = 0 ; i < isize ; i++ ) { printf("%02X", (int)num_buf[isize-i-1]); } } else { // リトルエンディアン for ( i = 0 ; i < isize ; i++ ) { printf("%02X", (int)num_buf[i]); } } printf(" "); return iRet; } // 表示レイアウト(フォーマット)文字列チェック int layout_str_check(char* str) { int i, len, iRet; unsigned char uc; len = (int)strlen(str); iRet = 0; for ( i = 0 ; i < len ; i++ ) { uc = str[i]; if ( !(uc == '1' || uc == '2' || uc == '4' || uc == '8') ) { iRet = 1; break; } } return iRet; } |
0 件のコメント:
コメントを投稿