私が理解しているように、wbモードを使用してCでファイルを保存することにより、保存されたファイルに2進数(0と1)が表示されないようにする必要があります。
wbモードで保存すると、ファイルの出力は次のようになります。
Feras Wilson —nFFFFîè`cPxHFFû¥2012
しかし、これはバイナリの0と1ではありません。0と1を含むようにファイルを保存してからCで読み取ることができるようにするにはどうすればよいですか?
0と1として保存されますが、テキストエディタはそれらをバイトとして読み取り(8ビットにグループ化します)、ASCIIを使用して表示します。[1]
テキストファイルに書き込む場合、書き込みたいバイナリデータを解釈して人間が読める形式にするために、多くの作業が行われます。
たとえば、数字を書く場合は255
、それを、、(文字です!)の形式にしてから、これらの各文字を書く必要があります'2'
。'5'
'5'
バイナリファイルに書き込む場合は、実際のバイナリデータをファイルに入れるだけです。これは、それがどのような種類の変数であるか(それが何オクテットでそれを表すか)、およびエンディアンなどに依存します。unsigned charの場合は、バイナリファイル0b11111111
(文字ではなく実際の生の数値です!)に入れられます。
これは、エディタまたはコマンドによるファイルのテキスト表現のみです。内部的には、すべてのファイルが0と1でHDD / SDD / RAM/に保存されます...-次のような16進エディターでファイルを開いてみてくださいbless
(Linuxで簡単に使用でき、WindowsではMonoが必要です-または、必要な別の16進エディターを検索してください使用する)バイトがどのように格納されるかを確認します。bless
さらに、ifがさまざまな形式でさまざまな表現を提供するため、使用することをお勧めします。
コードでは、readメソッドを使用してコンテンツをバイト単位で格納し、これを解釈できます。一度に複数のバイトを読み取る場合は、エンディアンの修正の可能性を念頭に置いてください。つまり、リトルエンディアンとビッグエンディアンのシステムは、「逆」の順序でバイトを格納および読み取ります。読み取られている単語は、おそらく。0x1337
として読み取られる可能性があります0x3713
。必要に応じて、この用語をよく理解し、ウィキペディアを使用してこれを処理する方法を理解してください。
すべてのファイルはバイナリで保存されます!これは、後続のプログラムがこのバイナリをどのように表示/解釈するかという問題にすぎません。このファイルの使用方法に応じて、文字を表す一連のバイト、命令を表す一連のバイト、またはUnicodeなどを表す単語として読み取られます。
ファイルをさまざまな形式で表示する場合は、次を使用しますod
。
名前
od - dump files in octal and other formats
これにより、ファイルが16進数、文字、8進数などでダンプされます(2進数で表示することはできませんが、8進数/ 16進数の出力から簡単に導き出すことができます)