ファイルにバイナリ形式で書き込まれた double 値が 1 つだけあるとします。C# または Java を使用してその値を読み取るにはどうすればよいですか?
巨大なバイナリ ファイルから double 値を見つけなければならない場合、それを見つけるためにどのような手法を使用すればよいですか?
4132 次
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 に答える