組み込みC/C++

C/C++リテラシー向上のためのページ

バイナリとテキスト②

テキストがバイナリのサブセットな為、基本的にはバイナリと言っていれば間違いではないのですが、それでもテキストとバイナリは意識して使い分けています。(以下は私の解釈なので一般的ではないかもしれません)

 

テキストファイルとバイナリファイルというと、

 

文字コードと改行文字、特殊文字だけで表現されているものを

テキストファイル、それ以外のデータが入っているものをバイナリファイル

と言っている気がしますが、C言語的には終端が0か否かで考えます。

 

char foo [ ] = {'A', 'B', 'C'};

は0終端でないのでバイナリ

この場合char型でバイナリデータを扱っているので望ましくない。

(このデータをテキストだと思って、文字列を扱う標準関数に引き渡すと0終端でないため予想しないバグが発生する。)

 

unsinged char bar [ ] = "ABC";

は0終端なのでテキスト

この場合はunsigned char型でテキストデータを扱っているので許容できるが、char型を使う方が寛容。

(標準関数に渡す時キャストする必要が出てくる。)

 

char foo [ ] = "abc";

は0終端なのでテキスト

この場合char型でテキストデータを扱っているので良い。

 

unsinged char bar [ ] = {'A', 'B', 'C'};

は0終端でないのでバイナリ

この場合はunsigned char型でバイナリデータを扱っているので良い。0終端でない事を意識するにもふさわしい型。

 

まとめ

テキストで扱いたいなら必ず0終端にする。