2
  1. ファイルにバイナリ形式で書き込まれた double 値が 1 つだけあるとします。C# または Java を使用してその値を読み取るにはどうすればよいですか?

  2. 巨大なバイナリ ファイルから double 値を見つけなければならない場合、それを見つけるためにどのような手法を使用すればよいですか?

4

6 に答える 6

10

double は 8 バイトです。BitConverterバイナリ ファイルから単一の double を読み取るには、クラスを使用できます。

var fileContent = File.ReadAllBytes("C:\\1.bin");
double value = BitConverter.ToDouble(fileContent, 0);

ファイルの途中から double を読み取る必要がある場合は、0 をバイト オフセットに置き換えます。

オフセットがわからない場合、バイト配列内の特定の値が double、integer、または string であると判断できない可能性があります。

別のアプローチは次のとおりです。

using (var fileStream = File.OpenRead("C:\\1.bin"))
using (var binaryReader = new BinaryReader(fileStream))
{
    // fileStream.Seek(0, SeekOrigin.Begin); // uncomment this line and set offset if the double is in the middle of the file
    var value = binaryReader.ReadDouble();
}

2 番目の方法は、ファイル コンテンツ全体をメモリに読み込まないため、大きなファイルに適しています。

于 2011-06-21T03:49:43.180 に答える
2

BinaryReaderクラスを使用できます。

double value;
using( Stream stream = File.OpenRead(fileName) )
using( BinaryReader reader = new BinaryReader(stream) )
{
    value = reader.ReadDouble();
}

2番目のポイントについては、オフセットがわかっている場合は、このStream.Seek方法を使用するだけです。

于 2011-06-21T03:56:27.407 に答える
1

double 値を見つける前に、ファイル内で double 値がどのようにエンコードされているかを知る必要があるようです。

于 2011-06-21T03:51:22.367 に答える
0
using (FileStream filestream = new FileStream(filename, FileMode.Open))
using (BinaryReader reader = new BinaryReader(filestream))
{
    float x = reader.ReadSingle();
}
于 2011-06-21T03:58:17.360 に答える
0

1)

        double theDouble;
        using (Stream sr = new FileStream(@"C:\delme.dat", FileMode.Open, FileAccess.Read))
        {
            byte[] buffer = new byte[8];
            sr.Read(buffer, 0, 8);

            theDouble = BitConverter.ToDouble(buffer, 0);
        }

2) できません。

于 2011-06-21T03:53:03.280 に答える
0

double を読み取る (およびテスト目的で書き込む) 方法は次のとおりです。

    // Write Double
    FileStream FS = new FileStream(@"C:\Test.bin", FileMode.Create);
    BinaryWriter BW = new BinaryWriter(FS);

    double Data = 123.456;

    BW.Write(Data);
    BW.Close();

    // Read Double
    FS = new FileStream(@"C:\Test.bin", FileMode.Open);
    BinaryReader BR = new BinaryReader(FS);

    Data = BR.ReadDouble();
    BR.Close();

大きなファイルからの取り出しは、ファイル内でのデータの配置方法によって異なります。

于 2011-06-21T03:53:26.237 に答える