ファイルの内容を16進数の数値に置換えてファイルに書き出します。つまり簡単なファイルのダンプリストを作成します。
Xcode で新規プロジェクトを Command Line Tool でType を Foundation で作成しました。NSAutoreleasePool は自動に作成されますが、この場合は必要がないので削除してもかまいません。個別のヘッダファイルを読込むのが手間なのでこうしましたが、そうでなければ Type を C で作成してやってもよいです。
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
FILE *rfp = fopen(argv[1], "r");
if (rfp == NULL) {
NSLog(@"Failed to read the file.");
return EXIT_FAILURE;
}
FILE *wfp = fopen(argv[2], "w");
if (wfp == NULL) {
NSLog(@"error:%s",strerror(errno));
fclose(rfp);
return EXIT_FAILURE;
}
off_t position;
fseeko(rfp, 0, SEEK_END);
position = ftello(rfp);
fseeko(rfp, 0, SEEK_SET);
int tmp;
for (NSInteger i = 0; i < position; ++i) {
tmp = fgetc(rfp);
fprintf(wfp, "%02X ",tmp);
if (((i + 1) % 16) == 0) {
fprintf(wfp, "\n");
}
}
fclose(rfp);
fclose(wfp);
[pool drain];
return EXIT_SUCCESS;
}
出力先のファイル名のファイルが既に存在している場合、何もなしに上書きされますので、使用の際にはご注意を。
やったこと
第1引数で指定されたパスからを fopen 関数で読込み用のファイル構造体のポインタを取得します。
第2引数で指定された書出し用のを取得。それぞれが NULL であった場合は終了。
読込み専用ファイルの終端の位置を取得する。
ループで1バイトずつ2桁の16進数で書込む。ファイルの終端になったらループが終了。
オープンしたファイルを閉じて終了。
TIFF を開いてみると先頭2つが ”49 49 ...” か ”4D 4D ...” になっていると思います。 いかがでしょうか?
0 件のコメント:
コメントを投稿