C言語でバイナリファイルを読み書きするサンプルです。
バイナリファイルの読み込み → ダンプ風に標準出力に出力 → バイナリファイルとして別のファイルに出力するところまでやってみました。

ポイント

  1. ファイルをオープンする時のオプションはrb wbとbを付けます。
    1. bをつけないとテキストだと思われて途中で処理が終わったりします。
  2. freadで読み込みます。
    1. パラメータは1.バッファのポインタ 2.読み込むサイズ 3.読み込む個数 4.ファイルポインタ
    2. サンプルはchar型(1byte)を512個の指定です。
  3. fwriteで書き込みます。
    1. パラメータは1.バッファのポインタ 2.書き込むサイズ 3.書き込む個数 4.ファイルポインタ
    2. 書き込みの個数は、読み込んだバイト数をそのまま使います。

ソース binaryIO.c

// バイナリファイルの読み書きサンプル
// 1.バイナリファイルを読み込み
// 2.ダンプ風に標準出力に出力
// 3.バイナリファイルとしてそのまま別のファイルに出力
 
// ポイント1.ファイルをオープンする時のオプションはrb wbとbを付けます
 
// ポイント2.freadで読み込みます。
// パラメータは1.読込バッファ 2.読み込むサイズ 3.読み込む個数 4.ファイルポインタ
// サンプルはchar型(1byte)を512個の指定です。
 
// ポイント3.fwriteで書き込みます。
// パラメータは1.バッファのポインタ 2.書き込むサイズ 3.書き込む個数 4.ファイルポインタ
// 書き込みの個数は、読み込んだバイト数をそのまま使います。
#include <stdio.h>
#include <stdlib.h>
 
int main(void) {
	// ファイルポインタ
	FILE *fpr, *fpw;
	// 読込サイズを保存する変数
	int s;
	// ループカウンタ
	int i;
 
	// 読込バッファ
	char buff[512]; // ※8の倍数にしないとダンプ風出力が面倒かも
 
	// ダンプ風標準出力用
	char str[17] = "0123456789ABCDEF";
 
	// ポイント1.ファイルをオープンする時のオプションはrb wbとbを付ける
	fpr = fopen("logo3w.png", "rb");
	fpw = fopen("copy.png", "wb");
	if (fpr == NULL ) {
		puts("ファイルがないよ!");
		return EXIT_FAILURE;
	}
 
	// ポイント2.freadで読み込みます。
	// パラメータは1.読込バッファ 2.読み込むサイズ 3.読み込む個数 4.ファイルポインタ
	// サンプルはchar型(1byte)を512個の指定です。
	while ((s = fread(buff, sizeof(char), sizeof(buff), fpr)) != 0) {
		// 2.ダンプ風に標準出力に出力
		for (i = 0; i < s; i++) {
			// 上位4ビットをcharの0~Fに変換
			printf("%c", str[buff[i] / 16 & 15]);
			// 下位4ビットをcharの0~Fに変換
			printf("%c ", str[buff[i] & 15]);
 
			if (i % 8 == 7) {
				// 8バイト毎に改行
				printf("\n");
			}
		}
 
		// ポイント3.fwriteで書き込みます。
		// パラメータは1.バッファのポインタ 2.書き込むサイズ 3.書き込む個数 4.ファイルポインタ
		// 書き込みの個数は、読み込んだバイト数をそのまま使います。
		// 3.バイナリファイルとしてそのまま別のファイルに出力
		fwrite(buff, sizeof(char), s, fpw);
	}
 
	// ファイルクローズ
	fclose(fpr);
	fclose(fpw);
	return EXIT_SUCCESS;
}
 

ideone ソースをコピペしたりできます


読み込んだファイル(googleのロゴ画像をサンプルに使いました


実行結果(無駄に長いので折りたたんであります

+ ...

添付ファイル