はい、まさにその通りfwrite()
です。const void *
「任意の型のデータへのポインタ」を意味する a を使用し、バイトへのポインタとして扱います。
したがって、ラッパーは実際には必要ありません。正しいサイズの呼び出しをfwrite()
すぐに実行して、配列を書き込むことができます。
const int my_ints[3] = { 1, 2, 3 };
const double my_doubles[5] = { 5, 4, 3, 2, 1 };
fwrite(my_ints, sizeof *my_ints, sizeof my_ints / sizeof *my_ints, stdout);
fwrite(my_doubles, sizeof *my_doubles, sizeof my_doubles / sizeof *my_doubles, stdout);
へのバイナリ データの書き込みstdout
は多少失礼な場合があることに注意してください。また、I/O 呼び出しのエラーをチェックする必要があることにも注意してください。
の API が使用する「y バイトの x 要素」モデルを削除し、fwrite()
それらをバイトの単一のチャンクとして扱うだけで、呼び出しを簡素化できます。
fwrite(my_ints, sizeof my_ints, 1, stdout);
fwrite(my_doubles, sizeof my_doubles, 1, stdout);
ループには意味がないことに注意してください。各配列の数値はメモリ内で隣接するためfwrite()
、一度にすべて書き込むことができます。一般的には、実行される I/O 呼び出しの数をできるだけ少なくするのが最善です。そのため、バイトごとに書き込むのではn * m
なく、1 回のバイト書き込みを行うことができれば、ほとんどの場合、そのほうが優れています。書き込むデバイスの多くはブロック指向であり、データのブロック全体を取得することで多くのメリットが得られることに注意してください。n
m