ダンププログラムを作る

参考: スラスラわかるC++ 第2版, pp.360-373

main函数int main(void)にはせずにint main(int 引数の数, char *引数排列[])のようにして実行時に引数が渡せるようにする。char *引数排列[]はポインタの排列。

下の実行例では、引数排列[0]に"ConsoleApplication12.exe"が入り、引数排列[1]に"sute.bin"が入る。

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

int main(int num_of_args, char *args[]) {
    char data;   //  ファイルから読み出した1バイトデータを格納するための変数。
    int num = 0; // ファイルから読み出したバイト数。

    if (num_of_args != 2) {  // 引数の数が間違っていたら、
        printf("retry\r\n"); // 何かを表示して、
        return 1;            // 終了する。
    }

    ifstream neko(args[1], ios::in | ios::binary); // ダンプするファイル(args[1])を開いて、 
    if (!neko.is_open()) {                         // 開けなかったら
        printf("cannot be opened\r\n");            // 何かを表示して、
        return 2;                                  // 終了する。
    }

    while (neko.get(data)) {    // 1バイトずつ読み込んで、
        //cout << setw(2) << setfill('0') << hex << uppercase << ((int)data & 0xff) << ' ';
        printf("%02X ", data);  // 読み込んだ1バイトをコンソールに表示して、

        if (++num % 16 == 0) {  // 16バイト読み込むごとに、
            printf("\r\n");     // 読みやすくなるよう改行する。
        }
    }

    return 0;
}

f:id:ti-nspire:20190610094744p:plain

このファイルをダンプした:
f:id:ti-nspire:20190610093704p:plain