2012-04-23 13 views
2

編集:入力matlabの精度を指定しても、特に指定しない限り、それらは倍精度に変換されます。私の間違い。Matlabのバイナリファイルから64ビット整数を読み込んでも正しい結果が得られません

matlabに単純な64ビット整数を読み込むのは、私がpythonまたはwindows calculatorで変換を行う場合とは異なる値を与えているようです。

私は8バイト長内容私はMathWorks社のMATLABで以下を使用

0x99, 0x1e, 0x6b, 0x40, 0x27, 0xe3, 0x01, 0x56 

ある小さなファイル、持っている:私はどちらか使用して、しかし

input = 6197484319962505200 

を取得

fid = fopen('test.data') 
input = fread(fid, 1, 'int64') 

を私は0x5601e327406b1e99の別の10進表現を取得します。どちらも、私は input = 6197484319962504857(これは343とは異なる)を取得すると予測しています。明らかにエンディアン問題ではありません。

大きなバイナリファイルから倍精度を読み込むと奇妙な結果が出ていたので、もともとテストしました。私は整数で読み込んで手で比較するだけでした。

私の質問は、私が間違っているか、見落としているか、ここでエラーを起こしているのですか?私はwin64のmatlab R2010aを使用しています。

答えて

6

問題はfreadが実際に二重のようにそれを読んでいるということのようだ:

>> class(input) 

ans = 

    double 

数が非常に大きいので、それはおそらく最も近いdouble値です。

私は手動で(the documentation for freadを参照)MATLAB変数は、ソースファイルタイプを指定することに加えて、int64なければならないことを指定した場合、それは私の作品:変換として文書化されてfread`

>> input = fread(fid, 1, '*int64') 

input = 

    6197484319962504857 
+2

右、 '特に指定しない限り、すべての値は 'double'になります。 –

関連する問題