2

これは、いくつかの変数をバイナリファイルに書き込んでから、それを読み戻すために作成した簡単なプログラムです。

バイナリファイルから文字列を読み取る方法を理解しようとしています。正しく書きました。しかし、私がそれを読み込もうとするたびに(この例では4バイトです)、結果は本当に奇妙になり、すべてが失敗します。b = "jump"ですが、どのように読み取って変換しようとしても、最終結果は奇妙なものになります。そして、その後に読み取られる変数bも奇妙になります。

バイナリファイルから文字列を読み取る適切な方法は何ですか?私の文字列はすべて、とにかく15文字の固定長になります。char配列に変換せずにそれを行う方法はありますか?

また、.ReadCharArrays()メソッドを試し、次にtoString()を試しましたが、まだ正しい変数を読み取っていません。

string path = ".//..//..//..//";

FileStream mfs = new FileStream(path + "test.bin", FileMode.OpenOrCreate, FileAccess.ReadWrite);
BinaryReader br = new BinaryReader(mfs);
BinaryWriter bw = new BinaryWriter(mfs);

short a = 2;
short b = 3;
string c = "JUMP";
bw.Write(a);
bw.Write(c);
bw.Write(b);

Console.WriteLine("Done writing to binary file");
br.BaseStream.Seek(0, SeekOrigin.Begin); //Apprantly you have to seek to beginning

a = br.ReadInt16();
c = br.ReadBytes(4).toString();
b = br.ReadInt16();

Console.WriteLine(""+a);
Console.WriteLine(""+c);
Console.WriteLine("");
Console.WriteLine("" +b); 
4

3 に答える 3

2

BinaryReader.ReadString()を使用して文字列を読み戻す必要があります-ReadBytesはバイトの配列を読み取り、デフォルトでは文字列は.NETではUnicodeです。

于 2013-02-13T02:01:48.647 に答える
2

BinaryReader.ReadString()。コードをテストしたところ、正常に機能しているようです。

a = br.ReadInt16();
string d = br.ReadString(); // store in another variable just to be sure..
b = br.ReadInt16();

Console.WriteLine("" + a);
Console.WriteLine("" + d); // JUMP
Console.WriteLine("");
Console.WriteLine("" + b);
于 2013-02-13T02:04:08.517 に答える
2

「JUMP」が4バイトを占めると思う根拠は?

BinaryWriter.Write(文字列):

BinaryWriter の現在のエンコーディングで、長さがプレフィックスされた文字列をこのストリームに書き込みます。

于 2013-02-13T02:00:52.580 に答える