Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
【質問】ちょっと特殊なデータ変換について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30072#CommentId79176
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
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 文字単位でしか変換できないため、
文字列全体を変換する場合はループ処理が必要になります。