投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/5/22 08:15:09
バイナリファイルの読み込みに使うべきは、Byte 型の一次元配列です。
たとえば、System.IO.File.ReadAllBytes など。

データ量が多い場合は、Stream からの随時読み込みでも良いですし、
データ構造が決まっている場合はデシリアライズを使うといった手も
ありますが、それはさておき。


> バイナリファイルをstring型で読み込んだ後

テキストファイルであれば String 型を使っても良いですが、
バイナリファイルの読み込みに使ってはいけません。
そのエンコーディングでありえない組み合わせのバイナリが来た場合、
文字に変換できないため、データが破損する可能性があります。いわゆる文字化けです。
この場合、実行する OS によって化け方が異なったりもします。


> 各bitが同じ状態の数値データに変えることは可能でしょうか。

読み込んだ文字(Char)や文字列(String)自体には、その元となったデータが
どの文字コードで読み取られた物なのかという情報が含まれていません。

どのような bit 状態となるべきかという情報は、System.Text.Encoding というクラスで扱われます。

Encoding クラスは、Shift_JIS だったり EUC-JP だったり UTF-8 だったりといった、
文字列符号化方式を管理するクラスです。その Encoding クラスの GetBytes メソッドを
使うことで、バイナリデータである数値列に復元できます。


Encoding クラスを使わない方法として、UTF-16 なら AscW 関数、Shift_JIS/ANSI なら
Asc 関数を使う手もあります。
https://msdn.microsoft.com/ja-jp/library/zew1e4wc.aspx

ただし Asc/AscW の場合、1 文字単位でしか変換できないため、
文字列全体を変換する場合はループ処理が必要になります。