| 
    
     |  | ▼kein さん: 
 >私がやりたいのはIEEE形式倍精度浮動小数点フォーマット(以下、IEEE)で
 >記録されているバイナリファイルを読み込んで10進数表記のテキストに
 >変換するということです。
 なるほど・・・。
 
 では、こんなコードを実行して試してみてください。
 
 新規ブックの標準モジュールにて、
 
 Sub バイナリファイルの作成()
 Dim dbl(1 To 3) As Double
 Dim fno As Long
 dbl(1) = 0.111
 dbl(2) = 3
 dbl(3) = 4
 '書き込むデータは上記の配列です
 fno = FreeFile
 
 Open ThisWorkbook.Path & "\sample.bin" For Binary As #fno
 Put #1, , dbl()
 Close #fno
 End Sub
 
 ThisWorkbook.Path を使っていますから、名前を付けて保存してから、
 上記のコードを実行してください。
 
 
 ブックと同じフォルダ上に sample.binというファイルが作成されます。
 
 バイナリエディタを使えば、中身をHEXイメージで見ることが出来ますから、
 見てみてください。
 
 ファイルのプロパティを見れば、サイズが24バイトと表示されているはずです。
 当然ですよね?
 倍精度浮動小数点データを3つ書き込んでいますから、
 3*8=24バイトですね!!
 
 バイナリエディタで中身をみると、以下のようなHEXイメージが表示されます。
 
 D1 22 DB F9 7E 6A BC 3F 00 00 00 00 00 00 08 40
 00 00 00 00 00 00 10 40
 
 いかがですか? 想像したような値ですか?
 
 最初の8バイト(D1 22 DB F9 7E 6A BC 3F)で0.111 という数字を表していることに
 なるのですが、最初のハーフバイトは、Dです。2進数では、1101ですね?
 
 >1ビット目が符号
 と仰っていましたが、1ですね? 0.111は、正の数なのに・・・。
 実は、ディスク上では、逆に記録されているので本当は、
 
 3F BC 6A 7E F9 DB 22 D1 なんです。
 
 これが、0.111なんです。
 
 
 ですから、Byte変数で読み込んだ場合は、そのまま、
 D1 22 DB F9 7E 6A BC 3F の順序で読み込んでしまいますから、
 
 その辺りも考慮しなければなりません。
 
 が、倍精度浮動小数点のデータだけだと分かっているなら・・・、
 
 Sub バイナリファイルの読み込み()
 Dim g0 As Long
 Dim dbl() As Double
 Dim fno As Long
 fno = FreeFile
 Open ThisWorkbook.Path & "\sample.bin" For Binary As #fno
 ReDim dbl(1 To LOF(fno) / 8)
 Get #1, , dbl()
 Close #fno
 For g0 = LBound(dbl()) To UBound(dbl())
 MsgBox g0 & "番目の数字は、  " & dbl(g0)
 Next
 MsgBox "終わり"
 End Sub
 
 こんなコードで値は、取得できます。
 
 こういうことですか?
 
 
 |  |