C#がそのバイト[]と同等に文字列を変換します
質問
この時点で、ほとんどの人が、「このああ病気記事を..:」思考されます。
byte[] dataB= System.Text.Encoding.ASCII.GetBytes(data);
しかし..私は持っている問題は、私は各バイトのためだけの純粋な価値がないエンコーディングとバイトの正確な値が必要です。文字列の値が(0xFF32)である場合、例えば、私はそれがあまりに{255,50}に変換します。彼は、この理由は、私は、私はバイトがそれらを保存し、プログラムを開いたときにそれらを読み込むとint型のを格納する読み取ろうとしていますファイル形式を持っている。
これは私がこれまで持っているものです。
...
dialog.InitialDirectory =
Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) +
"/Test";
dialog.Title="Open File";
if (dialog.ShowDialog(this) == DialogResult.OK)
{
StreamReader reader = new StreamReader(dialog.FileName);
string data = reader.ReadToEnd();
reader.Close();
byte[] fileC = System.Text.Encoding.ASCII.GetBytes(data);
File_Read(dialog.FileName,fileC);
}
...
だから私がしようとすると、ファイルを読み込む際には0xFFが127より大きいであるとは0x3Fがあるので、それはは0x3Fに言うの0xFFのファイル修道院に変換?ます。
申し訳ありませんが、私は少し混乱に見える場合:)
おかげで、 マイケル
解決
問題がで開始するあなたのアプローチである。
ノーエンコーディングとバイトの正確な値を必要とする
...
例えば、文字列の値である場合(0xFF32)
これはビット油絵を見て、言ったようなものだ「私はエンコードなしで、その絵のためにバイトをしたいです。」それは意味をなさない。テキストはバイナリデータと同じではありません。あなたはそれを理解すれば、それは問題の根本を取得するのは簡単です。あなたが本当にしたいことは、バイト配列としてのファイルの内容です。ファイルがバイナリデータであるため、それは、簡単です!それは本当にテキストでない場合は、最初の場所でテキストとしてそれを読んでするべきではありません。幸い、.NETは、これは本当に簡単になります:
byte[] fileC = File.ReadAllBytes(dialog.FileName);
他のヒント
しかし..私は持っている問題は、私は各バイトのためだけの純粋な価値がないエンコーディングとバイトの正確な値が必要です。
そして、これを使用します:
byte[] dataB = System.Text.Encoding.Unicode.GetBytes(data);
NETの文字列によって内部的に格納されているように、これは、バイトを戻します。
しかし、すべてこれはcodswallopです:文字列は、の常にの特定のエンコーディングにリンクされ、その周りに方法はありませんされています。上記失敗例えばファイルが無効なUnicodeコード(起こり得る)配列または正規化を介しが含まれている場合。あなたは明らかにがのstring
たくないので、1を読んでいません。代わりにバイナリデータとしてファイルを読み込みます。
//文字列をバイト配列に変換
public static byte[] StrToByteArray(string str)
{
System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
return encoding.GetBytes(str);
}
//文字列にバイト配列に変換
public string ByteArrayToStr(byte [] dBytes)
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
return enc.GetString(dBytes);
}
なぜ全く文字列から変換しますか?あなただけの直接バイトにファイルの内容を読み取ることができませんでした?
byte[] fileC = File.ReadAllBytes(dialog.FileName);
あなたがバイトをしたい場合は、ストリームを使用!
なぜ地球上であなたがたTextReaderをいじっていますか?
EDITます:
あなたの例のように、あなたはファイルを開く、これだけのFileStreamを使用されます。