2011-11-07 9 views
1
RandomAccessFile in = new RandomAccessFile("BOT.grd", "r"); 
in.seek(28); 
double xll=in.readDouble(); 

をダブルを読みながら、間違った値を得ることが、私は29〜36バイトのロケーションこの値存在から存在している二重のデータを読み取るために使用していたコードは500ですが、私は2.088Eを取得しています-317上記Javaでバイナリファイルから

+6

ファイルを読み取っているコードやファイルを書き込んでいるコードに問題があります。これ以上の詳細/コード/例なしで言うことができます。 http://tinyurl.com/so-hintsを参照してください –

+7

[SSCCE](http://sscce.org) – aioobe

+2

を作成する暗闇の中でのショット:ダブルスの代わりにフロートを読む? –

答えて

1

このファイルは、javaとは異なるEndiannessに格納されているようです。バイトおそらく倍増する変換する前に逆転される必要があり、あなたが値を読み取るために、次のコードを試みることができる:ここで

long l = in.readLong(); 
double d = Double.longBitsToDouble(Long.reverseBytes(l)); 

は、問題を示し例である:

double d = 500.0; 

long l1 = Double.doubleToLongBits(d); 
long l2 = Long.reverseBytes(l1); 

System.out.println(Double.longBitsToDouble(l1)); 
System.out.println(Double.longBitsToDouble(l2)); 

出力:

500.0 
2.088356E-317 
+0

@ravitejaこれはまだあなたのために働いていないですか?もしそうなら、私たちはこのファイルフォーマットのいくつかの情報や例を必要とします。しかし、あなたがこの答えを受け入れると、私はそれがあなたの問題を解決したと考えます。 –

関連する問題