Engineerの研鑽

メインはプログラミング系ブログ(本の要約とかもします)

質問はCONTACTやコメントでお願い致します。

【C言語の洞窟】データをバイナリ形式で標準出力に表示してみよう

f:id:yukiyukiponsu:20190506221210p:plain

こんにちわ! 現役理系大学生のゆきぽんずです

 

C言語の問題に取り組んでいると、「データをバイナリ形式で標準出力に表示する」と書かれているときがあります

 

そこでまずは、「バイナリ形式」の意味を説明します

 

次にプログラムを例にして、「データをバイナリ形式で標準出力に表示する」方法を説明していきます

 

最後に、テキスト形式とバイナリ形式の違いについても、プログラムを例にして解説していきます

 

プログラムの内容だけを知りたい方は、「実際にプログラムを書いてみよう」だけを見てください

 

この記事の目的
  • バイナリ形式の意味を理解できる
  • 実際にプログラムをかけるようになる
  • テキスト形式とバイナリ形式の違いについて理解できる

 

データをバイナリ形式で標準出力に表示してみよう

バイナリ形式の意味

一言で表すと、「テキストデータ(文字だけ)以外のデータ」をバイナリ形式と言います

 

分かりやすく例えると

  • テキスト形式は人間が見て理解できる
  • バイナリ形式は人間が見て理解できない

 

より詳しい内容は、プログラムを見ながら理解していきましょう

実際にプログラムを書いてみよう

プログラム例 : q3.c

* 0~πまでを10等分し、その時のsin関数の値を順にdouble型に計算するプログラム

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N 10

int main(void){
int n = 0;
double ans[N+1];

ans[n] = sin(n);

for(n=1; n<=N; n++){
ans[n] = sin(M_PI/n);

//標準出力にテキスト形式で表示
//テキストデータは人間が見て理解できる
printf("%lf\n", ans[n]);
}

//標準出力にバイナリ形式で表示
//バイナリデータは人間が見ても理解できない
fwrite(&ans, sizeof(double), N+1, stdout);
printf("\n");

return 0;
}

 以上がプログラム例となります

 

このプログラムをコンパイルし、実行すると以下のようになります

* Windowsでやってます 

 

コンパイル

gcc -o q3 q3.c

 

実行

q3.exe

 

実行結果

0.000000
1.000000
0.866025
0.707107
0.587785
0.500000
0.433884
0.382683
0.342020
0.309017
ヲ。< ・ェLX閊カ・フ;f棧・^Zu#マ・゚?チォqMタトロ?cゥョヲ竈リ?・閣ィ耻?O・7・モ?

 

この実行結果を見てもらうとわかるように、テキスト形式(printf関数を使用)で表示した時は、人間が理解できるような数字となっています

 

しかし、バイナリ形式(fwrite関数を使用)で表示した時は、人間が理解できない文字の並びになっています

 

これらの結果から、テキスト形式とバイナリ形式の違いが分かると思います

 

また、今回の目的である「データをバイナリ形式で標準出力に表示する」ことについても、q3.c のプログラム例を見てもらうとわかるように、fwrite関数を使うと実装可能です

 

もしバイナリ形式だけを表示したい場合は、printf関数をコメント文に変更してください

 

printf("%lf\n", ans[n]);

//printf("%lf\n", ans[n]); 

 

このように変更してください

まとめ

今日は、C言語でデータをバイナリ形式で標準出力に表示するプログラムを作成しました

 

また、プログラムを参考にして、バイナリ形式とテキスト形式の違いも理解してもらいました

 

ここまで記事を読み進めてもらうと、以下の内容が達成されていると思います

  • バイナリ形式の意味を理解できる
  • 実際にプログラムをかけるようになる
  • テキスト形式とバイナリ形式の違いが理解できる

 

もし何かわからないことがありましたら、コメントしてください

 

迅速に対応します

 

今日も読んでくださり、ありがとうございます

 

あなたのそばにゆきぽんず