

*バイナリファイルとは、テキストファイルではないコンピュータファイルのことです。[ 1 ]「バイナリファイル」という用語は、「非テキストファイル」という意味で使われることが多いです。[ 2 ]多くのバイナリファイル形式には、テキストとして解釈できる部分が含まれています。たとえば、古いMicrosoft Word文書ファイルなど、書式付きテキストを含む一部のコンピュータ文書ファイルには、文書のテキストだけでなく、バイナリ形式の書式情報も含まれています。[ 2 ]
現代のコンピュータはすべて、バイナリコードを用いてビット(2進数)の形で情報を保存します。そのため、コンピュータに保存されるデータはすべて、ある意味で「バイナリ」です。しかし、コンピュータに保存されるデータの中で特に有用で広く普及しているタイプの一つは、文字コードによってビットがテキストを表すものです。このようなファイルは「テキストファイル」と呼ばれ、そうでないファイルは、一種の逆称または上位称として「バイナリファイル」と呼ばれます。
一部の「テキストファイル」には、実際にはバイナリデータである部分が含まれており、また多くの「バイナリファイル」には、エンコードされたテキスト部分が含まれています。例えば、テキストデータがバイナリ形式内のフィールドとして格納されている場合や、ASCII文字に対応する任意の定数がニーモニックとして選択されている場合(これはファイルマジックナンバーでよく見られます)などがあります。このようなバイナリとテキストが混在するファイルは、テキストしか処理できないアプリケーションでは処理方法がわからないため、通常は「バイナリ」ファイルとみなされます。
テキストファイルでは、バイナリでエンコードできるデータをテキストでエンコードすることがよく行われます。このようなテキストファイルは、ファイルのビットが表す内容に関する前述の制約を満たしている限り、バイナリファイルではなくテキストファイルとみなされます。たとえば、バイナリファイルでは、数値250はビット列11111010としてエンコードできます。テキストファイル(たとえば、プログラミング言語のソースファイル)では、数字2、5、0としてエンコードすることもできます。これは、テキストファイル内のビットによって(たとえばUTF-8を使用して)00110010、00110101、00110000としてエンコードされます。
バイナリファイルは通常、バイト列であると考えられており、これはバイナリ数字(ビット)が8ビットずつグループ化されていることを意味します。バイナリファイルには通常、テキスト文字以外のものとして解釈されることを意図したバイトが含まれています。コンパイルされたコンピュータプログラムは典型的な例です。実際、コンパイルされたアプリケーションは、特にプログラマによってバイナリと呼ばれることがあります。しかし、バイナリファイルには、画像、音声、他のファイルの圧縮バージョンなど、つまりあらゆる種類のファイルコンテンツが含まれている場合もあります。[ 1 ]
バイナリファイルの中には、ヘッダーと呼ばれるメタデータブロックが含まれているものがあります。これは、コンピュータプログラムがファイル内のデータを解釈するために使用するものです。ヘッダーには、多くの場合、フォーマットを識別できる署名またはマジックナンバーが含まれています。たとえば、GIFファイルには複数の画像を含めることができ、ヘッダーは画像データの各ブロックを識別して説明するために使用されます。ヘッダーの先頭バイトには、バイナリがGIFGIF87aファイルであることを識別できるテキスト(例:)が含まれます。バイナリファイルにヘッダーが含まれていない場合、それはフラットバイナリファイルと呼ばれることがあります。GIF89a
テキストファイルは、エンコードされたバイナリ情報の一部または全部で構成される場合があります。バイナリファイルをネットワーク経由で送信する場合、印刷可能な文字のみを使用するようにエンコードされることがあります。これは、インターネット閲覧や電子メール通信に使用されるネットワークプロトコルの制限により、しばしば必要となります。そのようなエンコード方式の1つがBase64です。また、非対称暗号化を使用するシステム( Webサイトの証明書など)で使用される公開鍵と秘密鍵の情報を含むファイルも、バイナリ情報を印刷可能な文字でエンコードして保存される場合があります。
バイナリファイルを送信する際、すべてのデータ値を許可しないシステム(電子メールなど)では、多くの場合、バイナリファイルをプレーンテキスト形式に変換します(例えば、 Base64を使用)。データをエンコードすると、転送中にファイルサイズが増加するという欠点があります(例えば、Base64を使用するとファイルサイズが約30%増加します)。また、受信後にバイナリ形式に戻す必要もあります。このサイズ増加は、低レベルのリンク圧縮によって相殺できます。結果として得られるテキストデータは、サイズ増加分とほぼ同じだけエントロピーが低下するため、このシナリオで実際に転送されるデータサイズは、元のバイナリデータのサイズとほぼ同じになる可能性が高いです。この件の詳細については、「バイナリからテキストへのエンコード」を参照してください。
Microsoft WindowsおよびCおよびC++プログラミング言語用の標準ライブラリでは、プログラマがファイルを開く際に、ファイルがプレーンテキストかバイナリかを指定するパラメータを指定できます。これにより、標準ライブラリのファイル読み書き呼び出しに影響があり、システムは C/C++ の「行末」文字 (ASCII の改行文字) と Windows がファイルで想定する行末シーケンス (ASCII のキャリッジリターンと改行文字の連続) との間で変換を行います。Unix系システムでは、これらのシステムの C および C++ 標準ライブラリでも、プログラマがファイルがテキストかバイナリかを指定できますが、Unix 系システムの行末シーケンスは C/C++ の行末文字であるため、ライブラリはこのパラメータを無視できます。
バイナリファイルの対応するバイトの16進数(または10進数、2進数、ASCII文字)値のシーケンスとしてファイルデータを表示するには、16進エディタまたはビューアを使用できます。[ 2 ]
バイナリ ファイルをテキスト エディタで開くと、通常、8 ビットのグループごとに 1 文字として解釈され、ユーザーには (おそらく判読不能な) テキスト文字が表示されます。ファイルが他のアプリケーションで開かれると、そのアプリケーションは各バイトを独自の用途で使用します。たとえば、アプリケーションは各バイトを数値として扱い、0 から 255 までの数値のストリームを出力したり、バイト内の数値を色として解釈し、対応する画像を表示したりします。他のタイプのビューア (「ワード エクストラクタ」と呼ばれる) は、印刷できない文字を単にスペースに置き換えて、人間が読めるテキストのみを表示します。このタイプのビューは、バイナリ ファイルをすばやく検査して、ゲームのパスワードを見つけたり、非テキスト ファイル内の隠されたテキストを見つけたり、破損したドキュメントを復元したりするのに役立ちます。[ 2 ]不審なファイル (ソフトウェア) を検査して、望ましくない影響がないか確認するためにも使用できます。たとえば、ユーザーは、疑わしいソフトウェアが承認されていないデータをアップロード (盗む) するために接続しようとする可能性のある URL/メールを確認できます。ファイル自体が実行可能ファイルとして扱われて実行される場合、オペレーティングシステムはファイルを機械語の命令のシーケンスとして解釈しようとします。
バイナリファイルにとって、標準規格は非常に重要です。例えば、ASCII文字セットで解釈されたバイナリファイルは、テキストとして表示されます。しかし、カスタムアプリケーションでは、ファイルの解釈方法が異なる場合があります。1バイトが音声、ピクセル、あるいは単語全体を表すこともあります。バイナリ自体は、実行されるアルゴリズムによって各ビット、バイト、単語、またはブロックの処理方法が定義されるまでは意味を持ちません。そのため、バイナリを調べて既知のフォーマットと照合しようとするだけでは、実際に何を表しているのかについて誤った結論に至る可能性があります。この事実は、ステガノグラフィーで利用されます。ステガノグラフィーでは、アルゴリズムがバイナリデータファイルを異なる方法で解釈することで、隠されたコンテンツを明らかにします。アルゴリズムがなければ、隠されたコンテンツが存在することすら分かりません。
バイナリ互換性のある2つのファイルは、ファイルのデータ部分のゼロとイチの並びが同じになります。ただし、ファイルヘッダーは異なる場合があります。
この用語は、あるアプリケーションで生成されたデータファイルが、別のアプリケーションで生成されたデータファイルと完全に同一であることを示すために最も一般的に使用されます。例えば、一部のソフトウェア会社は、WindowsとMacintosh向けにバイナリ互換性のあるアプリケーションを開発しています。これは、Windows環境で生成されたファイルがMacintoshで生成されたファイルと互換性があることを意味します。これにより、データのインポートやエクスポートによって発生する多くの変換問題を回避できます。
異なるコンピュータ間で発生する可能性のあるバイナリ互換性の問題の1つは、コンピュータのエンディアンです。一部のコンピュータは、ファイル内のバイトを異なる順序で保存します。 [ 3 ]