2012-04-12 5 views
1

私はCでFileIOを学んでいて、バイナリファイルと少し混乱していました。私の質問は、バイナリファイルを使用するのは、ASCIIやその他の形式のファイルをいつでも使いこなすことができるということです。どのアプリケーションでバイナリファイルがより有用なのでしょうか? これは本当にappriciated.Thanks上の任意のヘルプ!アクセスバイナリファイルを使用する目的は何ですか?

難読化

+0

プログラムはバイナリです。可能なバイナリコードは、CPUのプログラム命令である可能性があります – gbulmer

+0

あなたの質問に別の質問で答えることができます:ASCIIモードのみを使用する場合、ファイル内にC構造を保存することはできますか? –

答えて

5

すべてのファイルは本質的にバイナリです。 ASCIIファイルは、人間が読める形式のデータと考えられるバイナリファイルのサブセットです。純粋なバイナリファイルは、読み取り可能な文字のサブセットに制約されません。

3

スピード大きなシリアル化されたファイルを作成せずにファイルにネイティブオブジェクトを書き込むことができます。

+0

+1難読化のために – mgilson

3

ASCIIは人間が容易に理解できますが、他の多くの目的では、コンピュータがバイナリ形式で物を格納する方が効率的で簡単です。たとえば、一連の整数を保持する場合は、数字のASCII表現を書き出して読み込み中に解析するよりも、コンピュータがintを表すのに4バイトを読み書きする方が簡単です。

2

すべてのバイト値を格納できることは非常に重要です。例えば、プログラムはバイナリです。任意の可能なバイナリコードは、CPUに対するプログラム命令であってもよい。

ASCIIには7ビットの値しか格納されないため、値の半分が無駄になります。

また、整数はどのように格納されますか?

数字4294967295は4バイト、32ビットで保存できますが、数字でASCIIで保存した場合は10文字必要です。さらに、それを32ビット番号に変換する処理が必要になります。これらのことはどちらも良いことではありません。

32ビットの数値は固定サイズなので、ファイル内の234856番目の値に到達するのは簡単です。ちょうど4 * 234856の位置に移動します。

32ビット数値がASCII形式で格納されている場合は、常にファイルを2.5倍大きくするか、可変サイズで格納する必要があります。ファイル全体を読み取らずに特定の値にシークすることは事実上不可能です。

編集:

は(通常の使用で)人間は、ファイルに保持されているデータを見ることができないと付け加えた価値があります。ファイルの内容を調べる唯一の方法は、データを読み取って使用できるプログラムを実行することです。だから、人間の利便性は小さな考慮事項です。

一般に、データはプログラム使用のために最も便利な形式で保存され、その形式はプログラムの目的に合うように設計されています。 ASCIIは、人間が読める文書を作成し、英語の文字、数字、および句読点に限定されたテキストを表示する簡単な方法をサポートするテキスト編集プログラム用に設計された形式です。人間が書いたすべての言語をサポートしたい場合、ASCIIはあまりにも限られています。

私は、人間が書いた言語(およびその他の画像)を表現するために100万人を超える文字を持っていると考えています。

UTF-8は、これまでに書いた文字を複数バイトで表現する方法です。 UTF-8は8ビットのエンコーディングを使用しますが、これはASCIIの範囲を超えています。

+0

+1。良い説明のために1.thx。あなたは再び私に考えさせてくれました:) – Shash

1

バイナリファイルは、コンピュータプログラムによって直接解釈され、人間が読むことができないデータの真の表現であると考えてください。プログラムがアスキー形式であれアスキーであれ数値であれ、データを書き出すにはオーバーヘッドが大きくなります。ほとんどの場合、プログラマは配列、構造体、スカラーをascii形式でファイルに書き込むためのプロトコルを開発する必要があります。そのため、人間が読めるようになり、プログラムによって再び読み込まれ、バイナリ形式に変換されます。

データベーステーブルは良い例です。表にテキスト・フィールドまたは数値フィールドがあるかどうかに関係なく、データベース・マネージャーはそのデータをバイナリー形式で読み書きします。読み書き可能なデータを表示するために、必要に応じて書き出し、読み込み、変換する方が簡単です。

パーセプションは私がこれまで考えていなかった素晴らしい答えを与えました。すべてのデータはバイナリで、asciiはサブセットです。その答えは私にftpを考えさせ、モードをASCIIまたはバイナリに設定しました。私がWindowsバイナリをLinuxシステムに格納しているなら、ftpにバイナリとして転送するよう伝えます。つまり、アスキーファイルとして解釈せず、各行の最後に\ crを追加してください。 .csvファイルと.txtデータをバイナリ形式で転送する場合もあります.Windows Excelは、これらの非DOSファイルをどのように解釈するのかを知っているからです。

+0

あなたの説明をありがとう。 +1 – Shash

0

イメージ、オーディオファイル、またはGISデータ、または宇宙船のテレメトリをエンコード/デコードするプログラムを作成したくない場合、または<を空白に入れてください。>をASCIIとして入力してください。

関連する問題